看了半天感觉大家讲的不是很清楚,明明并不复杂。另外用vlookup多条件查询并不需要shift+enter
忽略不精确查找的情况(range_lookup=1)因为我目前用不到。
先说一下解决方法:=vlookup(条件1&条件2,if({1,0},查询列1&查询列2,输出列),2)
下文是如何理解:
以下图两个条件查询为例,在AB列查询E2与F1条件,输出C列对应的结果
前两个部分很好理解,通过&连接两个条件或两个数组(E2&F1),实际上是创造了辅助列,把多条件转化为单条件,也就是查询值变成了‘ALB1’,查询数组变成了B与A合成的一列
查询值:ALB&1(ALB与1) 查询数组:B:B&A:A (B与A列)
真正需要理解的是IF的使用和查询结果在查询数组中的序号(col_index_num),本质上它的目标是把需要作为查找条件列合并成一列,同时纳入结果列,整合成一个拼接的多列(实例中为两列)结果。
首先回想一下单条件查询时的各个参数:
查找条件,在哪里查找,查询结果在查找的哪个位置(同时默认查询列是查找位置的第一列)
单条件查询时,我们可以做到查询数组是n:m的多列结构,所以能通过col_index_num参数来引用该多列结构中的某列
而多条件查询中,由于条件是通过连接缝合起来的辅助列,没有了多列的结构,就需要别的方法来创建这个可引用位置的结构,这就用上了IF函数。
平时用 if大多只用来做单次判断,其实也可以做到多次判断。需要区分 ifs是多条件判断。
IF能够通过在条件判断里进行多次判断做到我们需要的多类输出,由此可以利用它创建我们需要的可引用位置的结构。
示例:
多次判断条件:{1,0},即第一次判断条件为1,第二次判断条件为0
判断结果为True则输出2,False则输出3,
右图为结果(1=True,0=False)
实例中你需要输出位置col_index_num是2的,就是查询到判断结果里的第二列‘3’;输出位置col_index_num是1的,就查询到第一列的‘2’。
使用方案:if({1,0},查询列1&查询列2,输出列)
使用方案中需要输出你想要的输出列,就是要通过vlookup中指明col_index_num是2,来查询到if输出的判断结果里的第二列——输出列,可以指定col_index_num为1来查看一下拼接的查询列是什么状态。
那么到这里应该能够理解vlookup(条件1&条件2,if({1,0},查询列1&查询列2,输出列),2)了。
总结一下:
- 通过&连接查询条件与查询列
- 通过if让查询列与输出列形成一体的多输出结构
可以看到,if 的参数顺序也满足了vlookup要求查询列在第一列的要求,当然也可以调换为if({0,1},输出列,查询列1&查询列2)的形式。
多条件只需继续通过&连接即可,这样的结构还避免了vlookup参数中table_array里有很多无关的列有可能不小心引用到错误结果的情况。
有没有办法实现列的不连续引用来替代这个if 呢?欢迎讨论~