excel里vlookup能从函数里抓取数据吗?
发布网友
发布时间:2022-05-15 03:59
我来回答
共1个回答
热心网友
时间:2023-08-15 08:12
问题背景:在工作或生活中,经常要用到把两个表格的数据合并在一起,例如两个表格是相同的商品在不同时间段的价格或销售数据,需要根据商品名称把两个表的数据整合在一起以便做更深度的数据统计和分析。我们知道可以用vlookup函数查找和提取,通过vlookup函数根据名单来查找和引用数据,实现多表整合。
但是vlookup是通过指定区域的列号来提取数据的,即第三个参数决定的,例如:
=VLOOKUP(B3,(Sheet2!B:D),3,0)
逻辑为:根据sheet1里B3单元格(B列)的内容,去sheet2的B列到D列区域里查找相同的内容,并引用B3内容所在行的第三列(选择区域的第3列)的值。
因为是指定提取某列的数据,这就意味着一次只能提取一列数据,如果要求整合并入的内容有多列,那该怎么办呢?
根据vlookup的逻辑,可以想到两种方式来实现:一是每操作一列写一个公式,修改其第三个参数为指定内容的列号,这样的话,需要并入多少列,就要改写多少次公式;二是尝试让第三个参数形成变量,使公式支持往右列方向填充,并自动更新第三个参数的列号,从而实现写一次公式提取多列数据。
实例一:逐列写公式
提取sheet2的“5月销量”、“1-5月累计”两列到sheet1。
第一步:提取sheet2的“5月销量”到sheet1,即sheet1的H列提取sheet2指定区域B:E列的第三列,为D列。公式为=VLOOKUP(B3,(Sheet2!B:E),3,0)
第二步:同理,提取sheet2的“1-5月累计”到sheet1,即sheet1的I列提取sheet2指定区域B:E列的第四列,为E列。公式为=VLOOKUP(B3,(Sheet2!B:E),4,0)
实例二:变量公式
提取sheet2的“5月销量”、“1-5月累计”两列到sheet1。根据实例一分析,vlookup的第一个参数、第二个参数、第四个参数均不变,只要改变第三个参数即可。而实际中第三个参数是递增1的列号。如sheet1的H列提取sheet2中B:E区域的第3列,sheet1的I列提取sheet2中B:E区域的第4列,所以,只要构造公式,使vlookup第三个参数为3开始,递增为1的变量,实现取到3和4就行。
此时,我们可以用COLUMN函数作为vlookup的第三个参数。COLUMN是获取指定单元格所在列数的函数。公式为=COLUMN(A1),结果返回1,如果=COLUMN(B255),则返回2。
那么,为什么要用COLUMN取列号呢?为什么不用取行号的公式ROW呢,行号也可以构造出结果为3和4呀?
这是因为是要实现公式往右填充,用COLUMN才能往右递增,如果用ROW取行号,只能往下填充才递增。
第一步:提取sheet2的“5月销量”到sheet1。即对实例一的公式进行改进,由于这里我们对公式不仅要向下填充,还要为下一步向右填充做准备,所以对于不可变的参数,需要写绝对引用,公式为=VLOOKUP($B3,(Sheet2!$B:$E),(COLUMN(C1)),0)
第二步:同理,提取sheet2的“1-5月累计”到sheet1,因为vlookup第三个参数用了变量,此时把H3的公式向右填充即可,COLUMN(C1)为3即可变为COLUMN(D1),为4。
而由于vlookup的第一个参数和第二个参数单元格或列均用了绝对引用,只有向下填充行会变动,而向右填充列不会变动,因此能保证vlookup函数的Lookup_value和Table_array准确而不受公式向右填充改变,所提取的数据也是准确的。