Excel 中的多条件查找,其实不是很难,很多小伙伴都知道查找用 lookup、vlookup 函数,但具体怎么使用却不知所措。
今天跟大家分享多条件查找最常用的 8 个方法,如果你以前不懂,现在看看这篇文章,绝对可以给你带来收获~
下图是一个学科成绩表,我们需要通过左表的姓名和学号两个条件在右表中查找对应的成绩并返回到左表的 E 列中。
方法一:使用 LOOKUP 函数。
具体操作步骤如下:
1、选中E2单元格 — 在编辑栏中输入公式“=LOOKUP(1,0/(A2=$G$2:$G$11)*(B2=$H$2:$H$11),$I$2:$I$11)”– 按回车键回车,并将公式下拉填充至E11单元格。
2、动图演示如下。
3、公式解析。
(1)(A2=$G$2:$G$11)*(B2=$H$2:$H$11):
首先,将 A2 单元格的内容与 G2:G11 单元格区域的内容作对比,将 B2 单元格的内容与 H2:H11 单元格区域的内容作对比。如果 A2 单元格的内容与 G2:G11 单元格区域的内容相等,B2 单元格的内容与 H2:H11 单元格区域的内容相等,则返回 TRUE,不相等时,返回 FALSE。根据逻辑值 TRUE=1,FALSE=0,所以这部分公式得到的结果可能有 3 种情况:0*1;1*1;1*0。公式 A2=$G$2:$G$11 返回的结果为{0;0;0;0;0;1;0;0;0;0},因为只有 G6 单元格的值与 A2 相等。公式 B2=$H$2:$H$11 返回的结果为{0;0;0;0;0;1;0;0;0;0},因为只有 H6 单元格的值与 B2 相等。所以公式(A2=$G$2:$G$11)*(B2=$H$2:$H$11)返回的结果为{0;0;0;0;0;1;0;0;0;0}。
(2)0/(A2=$G$2:$G$11)*(B2=$H$2:$H$11):
LOOKUP 函数,如果要精确查找,第 2 个参数查找区域必须升序排序,得到的结果才是正确的。但我们这里没有升序排序,用到的是 LOOKUP 函数的二分法原理,用 0 来除以(A2=$G$2:$G$11)*(B2=$H$2:$H$11)这个公式的结果值,这里只会产生两种情况:0/0 或 0/1。而在除法运算中,被除数不能为 0,也就是分母不能为 0,所以在 Excel 中,0/0 会得到错误值#DIV/0!,而 0/1 的结果为 0。所以该公式返回的结果为{#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!}。
(3)=LOOKUP(1,0/(A2=$G$2:$G$11)*(B2=$H$2:$H$11),$I$2:$I$11):
根据第(2)步公式返回的结果{#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!},再根据 LOOKUP 函数的查找原理,忽略错误值查找,所以该公式的意思是,找到与 1 最接近的值,在第(2)步返回的结果数组中,错误值被忽略,只有一个 0,0<1,因此返回 I2:I11 单元格范围内的第 6 个数据,即 I7 单元格的内容“68”。
方法二:使用 VLOOKUP 函数。
具体操作步骤如下:
1、选中E2单元格 — 在编辑栏中输入公式“=VLOOKUP(A2&B2,IF({1,0},$G$2:$G$11&$H$2:$H$11,$I$2:$I$11),2,0)”– 按组合键“Ctrl+Shift+Enter”回车 — 并将公式下拉填充至E11单元格。
2、动图演示如下。
3、公式解析。
(1)A2&B2:
我们都知道,VLOOKUP 函数查找时查找值默认只能有一个条件,我们这里是多条件查找,所以可以通过文本连接符&将两个条件连接起来作为新的查找值。新的查找值也就是“姓名学号”。
(2)IF({1,0},$G$2:$G$11&$H$2:$H$11,$I$2:$I$11):
{1,0}相当于{TRUE,FALSE}。所以该公式就有两种情况:第一种情况:=IF(1,$G$2:$G$11&$H$2:$H$11,$I$2:$I$11),这种情况返回 G2:G11 单元格区域内容和 H2:H11 单元格区域内容合并后的结果。第二种情况:=IF(0,$G$2:$G$11&$H$2:$H$11,$I$2:$I$11),这种情况返回 I2:I11 单元格区域内容。所以{1,0}相当于重新构建了两列数据,第 1 列数据是以 G2:G11 单元格区域内容和 H2:H11 单元格区域内容合并后的数据,第 2 列数据是 I2:I11 单元格区域构建的数据,如下图所示。
(3)=VLOOKUP(A2&B2,IF({1,0},$G$2:$G$11&$H$2:$H$11,$I$2:$I$11),2,0):
第一个参数查找值“A2&B2”,要返回的结果值在 IF 构建的新数据区域中,属于第 2 列,所以第 3 个参数为 2,这里是精确查找,所以第 4 个参数为 0 或者 FALSE。
方法三:使用 OFFSET 函数+MATCH 函数。
具体操作步骤如下:
1、选中E2单元格 — 在编辑栏中输入公式“=OFFSET($I$1,MATCH(A2&B2,$G$2:$G$11&$H$2:$H$11,0),)”– 按组合键“Ctrl+Shift+Enter”回车 — 并将公式下拉填充至E11单元格。
2、动图演示如下。
3、公式解析。
(1)MATCH(A2&B2,$G$2:$G$11&$H$2:$H$11,0):
将 A2 单元格的姓名与 B2 单元格的学号通过用文本连接符合并作为新的查找内容,将 G 列的姓名和 H 列的学号通过文本连接符合并作为新的查找区域,0 表示精确查找。该公式返回的结果为“6”。
(2)=OFFSET($I$1,MATCH(A2&B2,$G$2:$G$11&$H$2:$H$11,0),):
OFFSET 函数是指以指定的单元格引用为参照系,通过给定偏移量得到新的引用。返回对单元格或单元格区域中指定行数和列数的区域的引用。 返回的引用可以是单个单元格或单元格区域。 可以指定要返回的行数和列数。该公式表示以$I$1 为参照单元格,通过 MATCH 查找出来顺序作为向下偏移的行数,偏移列数量省略表示不偏移,第三个、第四个参数省略表示只返回一个单元格区域。第(1)步 MATCH 函数得到的结果为 6,所以向下偏移 6 行时找到“68”。
方法四:使用 SUM 函数。
具体操作步骤如下:
1、选中E2单元格 — 在编辑栏中输入公式“=SUM((A2=$G$2:$G$11)*(B2=$H$2:$H$11)*($I$2:$I$11))”– 按组合键“Ctrl+Shift+Enter”回车 — 并将公式下拉填充至E11单元格。
2、动图演示如下。
3、公式解析。
(1)A2=$G$2:$G$11:
判断 A2 单元格的内容是否与 G2:G11 单元格区域的内容相等,如果相等,返回 TRUE,否则,返回 FALSE。该公式返回一个逻辑值数组{FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}。
(2)B2=$H$2:$H$11:
判断 B2 单元格的内容是否与 H2:H11 单元格区域的内容相等,如果相等,返回 TRUE,否则,返回 FALSE。该公式返回一个逻辑值数组{FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}。
(3)=SUM((A2=$G$2:$G$11)*(B2=$H$2:$H$11)*($I$2:$I$11)):
3 个值相乘,只有当前面 2 个值都为 TRUE 时,最后的结果才为 TRUE,而 TRUE=1,FALSE=0,从上面 2 步中,我们可以看到只有第 6 个值为 TRUE,其余都为 FALSE。再与 I2:I11 的值相乘,最后通过 SUM 函数将得到的值相加起来,最后的结果“68”,将公式往下填充,即可得到其他单元格的值。
方法五:使用 SUMPRODUCT 函数。
具体操作步骤如下:
1、选中E2单元格 — 在编辑栏中输入公式“=SUMPRODUCT((A2=$G$2:$G$11)*(B2=$H$2:$H$11)*($I$2:$I$11))”– 按Enter键回车 — 并将公式下拉填充至E11单元格。
2、动图演示如下。
3、公式解析。
(1)A2=$G$2:$G$11:
判断 A2 单元格的内容是否与 G2:G11 单元格区域的内容相等,如果相等,返回 TRUE,否则,返回 FALSE。该公式返回一个逻辑值数组{FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}。
(2)B2=$H$2:$H$11:
判断 B2 单元格的内容是否与 H2:H11 单元格区域的内容相等,如果相等,返回 TRUE,否则,返回 FALSE。该公式返回一个逻辑值数组{FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}。
(3)=SUMPRODUCT((A2=$G$2:$G$11)*(B2=$H$2:$H$11)*($I$2:$I$11)):
3 个值相乘,只有当前面 2 个值都为 TRUE 时,最后的结果才为 TRUE,而 TRUE=1,FALSE=0,从上面 2 步中,我们可以看到只有第 6 个值为 TRUE,其余都为 FALSE。再与 I2:I11 的值相乘,最后通过 SUMPRODUCT 函数将每个数组对应元素的值相乘,最后再相加,得到的结果为“68”,将公式往下填充,即可得到其他单元格的值。
方法六:使用 MAX 函数。
具体操作步骤如下:
1、选中E2单元格 — 在编辑栏中输入公式“=MAX((A2=$G$2:$G$11)*(B2=$H$2:$H$11)*($I$2:$I$11))”– 按组合键“Ctrl + Shift +Enter”回车 — 并将公式下拉填充至E11单元格。
2、动图演示如下。
3、公式解析。
(1)A2=$G$2:$G$11:
判断 A2 单元格的内容是否与 G2:G11 单元格区域的内容相等,如果相等,返回 TRUE,否则,返回 FALSE。该公式返回一个逻辑值数组{FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}。
(2)B2=$H$2:$H$11:
判断 B2 单元格的内容是否与 H2:H11 单元格区域的内容相等,如果相等,返回 TRUE,否则,返回 FALSE。该公式返回一个逻辑值数组{FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}。
(3)=MAX((A2=$G$2:$G$11)*(B2=$H$2:$H$11)*($I$2:$I$11)):
将(A2=$G$2:$G$11)*(B2=$H$2:$H$11)*($I$2:$I$11)这 3 个数组相乘,最后得到的结果为{0;0;0;0;0;68;0;0;0;0},根据 MAX 函数的原理,找到一组值中的最大值并返回,很显然,结果数组中的最大值为“68”,所以返回的结果为 68,将公式往下填充,即可得到其他单元格的值。
方法七:使用 MIN 函数+IF 函数。
1、选中E2单元格 — 在编辑栏中输入公式“=MIN(IF((A2=$G$2:$G$11)*(B2=$H$2:$H$11),$I$2:$I$11))”– 按组合键“Ctrl + Shift +Enter”回车 — 并将公式下拉填充至E11单元格。
2、动图演示如下。
3、公式解析。
(1)(A2=$G$2:$G$11)*(B2=$H$2:$H$11):
判断 A2 单元格的内容是否与 G2:G11 单元格区域的内容相等,如果相等,返回 TRUE,否则,返回 FALSE。判断 B2 单元格的内容是否与 H2:H11 单元格区域的内容相等,如果相等,返回 TRUE,否则,返回 FALSE。该公式返回一个 0 和 1 组成的数组{0;0;0;0;0;1;0;0;0;0}。
(2)IF((A2=$G$2:$G$11)*(B2=$H$2:$H$11),$I$2:$I$11):
如果(A2=$G$2:$G$11)*(B2=$H$2:$H$11)为 TRUE,返回$I$2:$I$11 单元格区域的内容,如果为 FALSE,返回空。所以该公式返回的结果为{FALSE;FALSE;FALSE;FALSE;FALSE;68;FALSE;FALSE;FALSE;FALSE}。
(3)=MIN(IF((A2=$G$2:$G$11)*(B2=$H$2:$H$11),$I$2:$I$11)):
MIN 函数是返回一组值中的最小值, 空单元格、逻辑值和文本将被忽略。由第(2)步可知,只有 68 是数值,所以返回的结果就是 68,将公式往下填充,即可得到其他单元格的值。
方法八:使用 INDEX 函数+MATCH 函数。
1、选中E2单元格 — 在编辑栏中输入公式“=INDEX($I$2:$I$11,MATCH(A2&B2,$G$2:$G$11&$H$2:$H$11,0))”– 按组合键“Ctrl+Shift+Enter”键回车 — 并将公式下拉填充至E11单元格。
2、动图演示如下。
3、公式解析。
(1)$I$2:$I$11:
要返回的结果所在的单元格区域。该公式得到一组数组{80;71;82;84;70;68;90;74;70;89}。
(2)MATCH(A2&B2,$G$2:$G$11&$H$2:$H$11,0):
将 A2 单元格的姓名与 B2 单元格的学号通过用文本连接符合并作为新的查找内容,将 G 列的姓名和 H 列的学号通过文本连接符合并作为新的查找区域,0 表示精确查找。该公式返回的结果为“6”。
(3)=INDEX($I$2:$I$11,MATCH(A2&B2,$G$2:$G$11&$H$2:$H$11,0)):
INDEX 函数的作用是: 返回表或区域中的值或值的引用。上述公式由第(1)步和第(2)步得到的结果,可将公式写成=INDEX({80;71;82;84;70;68;90;74;70;89},6)。6 是行号,也就是从在{80;71;82;84;70;68;90;74;70;89}这组值中返回第 6 行单元格值的引用,所以为 68,将公式往下填充,即可得到其他单元格的值。