跨表查询数据是常有的事,甚至有可能从多个表格里获取数据,如图所示,需要获取1-4四个月的明细表格里对应的数据到查询表格中。
提到查询数据,很多人都会说,简单,用VLOOKUP函数就行,下面我们一起来使用VLOOKUP函数看看。
在B2单元格内输入VLOOKUP函数的公式,"=VLOOKUP($A2,一月!A1:C11,3,0)",获得数据。
当我们向下和向右拖动公式的时候,会发现VLOOKUP函数能往下拖动公式,但往右拖动公式的时候,VLOOKUP函数的第二个参数并不会自动更新为表格2,表格3等等,故C列,D列,E列的公式都需要手动的更改参数2,才能获得正确数据,这样一来,工作量大,还容易漏改,而造成数据的不正确。
那,有没有可能让VLOOKUP函数的参数,也变成动态的呢?当然能!这里就要用到INDIRECT函数了。下面我们先来看看完整公式“=VLOOKUP($A2,INDIRECT(B$1&"!A1:C11"),3,0)”。
往下拖动和往右拖动,都能直接读取正确的数据,一个公式就搞定了整个表格的查询。
下面我们来看看这个公式为啥添加了INDIRECT函数就能动态查询了呢?先来看看INDIRECT函数。
INDIRECT:返回由文本字符串构成的数据引用区域,它是一个间接引用函数
语法:=INDIRECT(ref_text, [a1])
第一参数:定义的名称或者文本字符构成的引用的数据区域
第二参数:单元格引用类型,一种是A1用法(输入TRUE或1),一种是R1C1用法(输入FALSE或0),一般直接将其省略掉即可,默认为A1用法。
INDIRECT函数是一个间接引用函数,与之对应的就是直接引用,如何来区分直接引用和间接引用,下面我们用图例来看看。
如图所示,B24和B25使用公式都获取A21的结果,B24直接引用了单元格A21,返回了单元格A21里的数据,这是直接引用。
而B25是通过C21里的数据获取的A21单元格内内容,这就是间接引用,相当于多了个跳板。
而第一参数应该如何去构建呢?这里有两种方式。
方法一:定义名称,就是将定义的名称作为参数,输入到第一参数即可,通常用于制作多级联动下拉菜单(下一篇详细讲解)。
方法二:文本字符构成的引用区域。本文中查询案例中的INDIRECT函数公式“INDIRECT(B$1&"!A1:C11")”就是使用了文本字符构成的引用区域,先是使用B$1,这样在拖动公式的时候会自动设置为“一月,二月,三月,四月”和工作表的名称对应(这里的前提条件就是B1,C1,D1,E1中的标题必须和工作表一致),后面的“A1:C11”就是每个工作表的数据区域,我这个例子里的数据区域相同,如果行数不相同,则可以直接写成“A:C”,中间使用连接符“&”即将工作表的名称和数据区域连接起来,中间加感叹号(这是标准的引用写法),这样就变成了动态的数据区域。
这个公式可以收藏,遇到相似情况,直接套用格式即可。
现在,你能理解最前面这个VLOOKUP+INDIRECT组合的函数了吗?