【Excel函数篇】常用各种条件查询套路总结

今天和大家分享的主题是Excel函数常用的各种条件查询套路总结,内容涵盖了单条件数据查询、多条件数据查询、精确查询、模糊条件查询、多结果数据查询以及动态表格查询、多表数据查询等。建议收藏哦~

1,单条件单结果查询

酱紫的问题,我们最常用VLOOKUP函数。

VLOOKUP函数的语法非常简单。

=VLOOKUP(找谁,在哪里找,查找值在查找范围中的第几列?零失误找还是随便找?)

但该函数有3个新手容易犯错的注意点:

  1. 查找值必须在查找范围的首列。
  2. 第3参数是返回查找值在查找范围中的第几列,而不是表格的第几列。
  3. 第4个参数是匹配方式,当使用精确匹配方式时,通常输入0。
图01

当查找值不在查找范围首列时,与其选择VLOOKUP函数,不如使用INDEX+MATCH函数组合。公式:

=INDEX(A:A,MATCH(D2,B:B,0))

MATCH函数先取得D2单元格的值在B列中的序列号,然后通过INDEX函数按图索骥取得结果。

图02

有一部分表亲此时依然喜欢使用VLOOKUP函数:

{=VLOOKUP(D2,IF({1,0},B:B,A:A),2,0)}

坦白说,该数组公式计算效率和编写体验都奇差无比,是2B青年糊弄小白新手的常用伎俩,少用为宜。

2,多条件单结果查询

这样的问题我们通常使用LOOKUP函数。该套路可以总结为:

=LOOKUP(1,0/(条件1*条件2……),结果区域)

如下图所示,C10单元格公式:

=LOOKUP(1,0/((A$2:A$7=E2)*(B$2:B$7=F2)),C$2:C$7)
图03

3,单条件模糊查询

Excel内常用的通配符有两个。一个星号(*),一个问号(?)。

星号可以代替任意个字符,既可以是0个,也可以是多个。

问号只能代替任意一个字符。

MATCH函数和VLOOKUP函数都支持通配符的使用。

如下图所示,两个函数都可以解决问题。

公式1:=VLOOKUP("*"&D2&"*",A:B,2,0)

公式2:=INDEX(B:B,MATCH("*"&D2&"*",A:A,0))

图04

4,多条件模糊查询

多条件模糊查询依然可以使用LOOKUP(1,0/(条件),结果)的经典套路。

下面的公式利用SEARCH函数支持使用通配符的特性(FIND函数不支持通配符),进行模糊查询匹配。

公式:

=LOOKUP(1,0/SEARCH("*"&A10&"*"&B10&"*",A$2:A$7&B$2:B$7),C$2:C$7)
图05

5,多结果数据查询:

该问题依然有一个经典的万金油函数查询套路,INDEX+SMALL+IF+ROW。

公式:

=INDEX(查找区域,SMALL(IF(条件,ROW(与条件区域相同行数),4^8),ROW(A1)))

=INDEX($B:$B,SMALL(IF($A$1:$A$7=$D$2,ROW($1:$7)),ROW(A1)))

解说:

公式先通过IF函数判断A1:A7的数据是否等于D2单元格的查询值,如果相等,则返回对应值的行号,否则返回逻辑值FALSE;然后通过SMALL函数对行号从小到大取值,最后通过INDEX函数根据行号按图索骥取得最后的查询结果。

图06

6,动态表格数据查询

当根据单元格所输入或选择的表名,动态性的对相应的表格进行数据查询时,我们通常嵌套INDIRECT函数构建动态查询区域。

如下图所示,根据B1单元格输入的表名,查询B2单元格在该表所对应的成绩结果。公式:

=VLOOKUP(B2,INDIRECT(B1&"!A:B"),2,0)
图07

7,多表格数据查询

一个工作簿有多个表格,当你并不知道该查询值可能存在哪个表格时,可以使用以下多表数据查询套路。

假设表格名称是1~12月。公式:

=VLOOKUP(B1,INDIRECT(LOOKUP(1,0/COUNTIF(INDIRECT(ROW($1:$12)&"月!A:A"),B1),ROW($1:$12)&"月!a:b")),2,0)

解说:

该公式先通过INDIRECT(ROW($1:$12)&"月!A:A")构建多表数据区域,通过COUNTIF判断查询值在多表数据区域(A列)是否存在,然后通过LOOKUP的条件查询套路返回相应的表格名称,最后再使用INDIRECT函数对LOOKUP的表名查询结果构建VLOOKUP函数的查询区域,进而取得最后查询结果。

图08

8,查询最后一个非空单元格数据

A.返回A列最后一个数值:
=LOOKUP(9E+307,$A:$A) 或
=VLOOKUP(9^9,$A:$A,1)

B.返回A列最后一个文本:
=LOOKUP("々",$A:$A) 或
=VLOOKUP("做",$A:$A,1)

C.返回A列最后一个非空单元格内容:
=LOOKUP(1,0/($A:$A<>""),$A:$A)

【例】在下表的最后一行,提取每个公司最后一次还款金额,公式为:=VLOOKUP(9^9,B2:B16,1)

图09

如果要提取最后一次还款月份,则使用数组公式:

=VLOOKUP(9^9,$A2:$A16/(B2:B16>0),1)
图10

9,提取不重复值、提取唯一值

公式1(提取不重复值):
=INDEX(A:A,SMALL(IF(MATCH(A$2:A$9,A$2:A$9,)=ROW($1:$8),ROW($2:$9),4^8),ROW(A1)))&""
公式3(提取不重复值):
=INDEX(A:A,SMALL(IF(ROW($A$1:$A$100)=IFERROR(MATCH($A$1:$A$100,$A$1:$A$100,0),4^8),ROW($A$1:$A$100),4^8),ROW(A1)))&""
公式4(提取唯一值):
=INDEX(A:A,SMALL(IF(COUNTIF($A$1:$A$100,$A$1:$A$100)=1,ROW($A$1:$A$100),),ROW(A1)))&""

注意:Match查找范围 与 IF条件为真的表达式范围 引用行数要一致。
   比如:MATCH(A$2:A$9)与ROW($1:$8)及ROW($2:$9)行数均为8行
   又如:MATCH($A$1:$A$100)对应ROW($A$1:$A$100)

公式3用MATCH获得每个不重复姓名的行号,所以提取的是姓名下所有出现过的名字;公式4用COUNTIF计算姓名列下只出现一次(“=1”)的名字,但如果你在第1行前插入一行,你会发现公式计算结果又不正确了!

图11

10,统计非空不重复值个数

没有空值的情况下,可以使用下面函数公式:
=SUMPRODUCT(1/COUNTIF($A$1:$A$10,$A$1:$A$10))

如果存在空值,则需要配合IFERROR函数将错误值转换为0再求和,数组公式如下:
{=SUM(IFERROR(1/COUNTIFS($A$1:$A$10,"<>",$A$1:$A$10,$A$1:$A$10),))}
或:{=SUM(IFERROR(1/COUNTIF($A$1:$A$10,$A$1:$A$10),))}

作者: Hugh

Welcome to Wan's world~