如何用VLOOKUP函数查询Access中的数据
我们在Excel中查询数据的时候往往用VLOOKUP查询当前工作簿中的数据。但是我们的数据源往往并不是存储在当前工作簿。可能存储在其它的工作簿,也可能存储在文本文件,或者存储在数据库。
如果数据并不是存储在当前工作簿,比如数据存储在了Access中那么我们该怎样查询数据源呢?
此篇文章我们介绍一个新工具。它不仅可以用来查询Access中的数据还可以用来查询很多种来源的数据。
比如在Access中存储了全国所有大学的基本信息如下:
现在我们得到了一批大学名单如下:
需要查询这些学校的学生人数。这批学生名单存放在Excel中,该怎样匹配呢?
可能你会说把Access中的数据导出来到Excel里面用VLOOKUP匹配一下不就可以了。然而这只是一个简单的例子,如果数据量超出了excel容量限制该怎么办呢?如果数据是每日动态更新的该怎么办呢?
现在我们借助一个Excel插件SqlCel来解决这个问题。
安装这个插件后,你将进入一个新的数据世界。在这里数据都是互联的,各种数据库,文本,excel等数据源都可以互联互通,当然也包括excel和access。
我们要在excel中查询access中的数据,首先需要用excel连接上access数据库。只要将数据库的具体路径告诉插件即可,如下:
给这个连接取一个名字,接下来我们会用到,此处我们的连接名为Database1。接下来把access中的数据定义到excel中(工作表函数->定义数据源),如下:
在第一个字段下写SQL语句。此处的SQL语句和我们平时写的SQL语句略有不同,它最前面是 "access!Database1->“表示接下来的SQL语句将会提交给一个连接名为"Database1"的access数据库。数据源写好之后再给这个数据源取一个名字比如此处定义为"Colleges”。
通过预览或者查看所有数据可以将数据源查询到当前活动excel中。
点击"定义数据源"Access中的数据就被定义到Excel的内存中了,接下来我们就可以通过特定的工作表函数查询已定义的表里面的数据。
SqlCel提供了一系列统计查询函数。因为此处有的学校名称并不是完整的比如“矿业大学”,因此不可以用D_VLOOKUP函数,而D_FIND函数支持模糊查询,因此我们用D_FIND函数来查询数据。公式如下:
此处"Colleges!b:b"引用的是刚才定义的表"Colleges"的第二个字段。"%" & A1 & “%” 表示包含A1单元格的值, 这里面的%是通配符。如果公式写成
=D_FIND(“Colleges!b:b”,“Colleges!a:a”, A1)
则表示在"Colleges"的第一个字段精确查找A1单元格的值。此时该公式的效果和D_VLOOKUP相同,如下:
=D_VLOOKUP(A3,“Colleges!A:B”,2,0)
我们看到SqlCel的定义数据源和Excel的定义名称颇为相似,都是给数据源取一个名字,然后在公式里面引用这个名字从而找到数据源。
不同的是Excel自己的定义名称定义的数据源是Excel单元格里面的数据,而SqlCel定义的数据源的范围非常广,它涵盖了Excel可以连接上的所有数据源。因为它不仅可以天然支持四种主流数据库、文本、Excel,同时还可以支持用VBA定义数据源。因此触角非常全面。
通过D_VLOOKUP我们可以看到这个函数的用法和VLOOKUP也极为相似,只是D_VLOOKUP的第二个参数用字符串表示查找的数据区域。