按条件查找公式,常用的是 vlookup、xlookup 或 index+match,但是这些公式的查找区域基本都是在同一个工作表中。
如果查找区域分别在不同的工作表中呢?难度一下子就飙升了。这种情况下就可以用今天的这个公式,轻松搞定跨工作表查找。
案例:下图 1 至 3 是员工 1 至 3 月的业绩,要求在图 4 的查询表中根据姓名和月份查找出对应的业绩。
效果如下图 5 所示。
先设置下拉菜单。
1. 选中 A2 单元格 --> 选择工具栏的“数据”-->“数据验证”
2. 在弹出的对话框中选择“设置”选项卡 --> 在“允许”区域中选择“序列”--> 选择姓名区域作为“来源”--> 点击“确定”
3. 选中 B2 单元格 --> 选择“数据”-->“数据验证”
4. 在弹出的对话框中与步骤 2 一样设置,在“来源”区域中输入“1月,2月,3月”--> 点击“确定”
接下来就是查询公式了。
5. 在 C2 单元格中输入以下公式:
=FILTER(VSTACK('1月:3月'!C2:C10),(VSTACK('1月:3月'!A2:A10)=查询!A2)*(VSTACK('1月:3月'!B2:B10)=查询!B2))
公式释义:
filter 的作用是基于定义的条件筛选一系列数据;语法为 FILTER(要筛选的区域,布尔值数组,[为空时返回的值]);
VSTACK('1月:3月'!C2:C10):这段公式是 filter 函数的筛选区域,结果为“1月”至“3月”工作表的 C2:C10 区域的合集;vstack 函数的作用是按顺序垂直追加数组;
(VSTACK('1月:3月'!A2:A10)=查询!A2)*(VSTACK('1月:3月'!B2:B10)=查询!B2):
这段看着挺长,其实很简单,整个公式是 filter 函数的筛选条件;
中间用“*”将两个 vstack 函数连接起来,表示 and,即两个条件都要满足;
VSTACK('1月:3月'!A2:A10)=查询!A2:第一个条件,将“1月”至“3月”工作表中的 A2:A10 区域连接后,判断每个单元格是否与“查询”工作表中的 A2 单元格相等;
VSTACK('1月:3月'!B2:B10)=查询!B2:同理,将 3 个月份的 B2:B10 区域连接,判断其中的每个单元格是否等于“查询”工作表中的 B2 单元格;
filter 函数会从合并区域中查找出同时满足上述两个条件的单元格
如果 A、B 列的条件换了,C 列的公式仍然会查找出正确的结果。