EXCEL中的多条件匹配

问题:日常处理数据经常碰到多条件匹配问题,有些小数据需要迅速,也不值得上数据库,示例如下:

image.png
这是一个多条件问题,查找 “公元201年”、“刘备” 在 “上海” 的财产,需要以下几列进行匹配:
  • 年份
  • 姓名
  • 地点
网上找到不到我满意的方法,我直接用mach函数(简单、无脑、出不了错),match函数介绍如下(大家可以在EXCEL中查看帮助):
image.png
以下是代码(以示例数据进行演示):
image.png

上图中的 “财产” 列表示对应原数据中的第4、8、12条记录。
代码:

# 在K2单元格输入如下代码:
     =MATCH(1,(A$2:A$16=H2)*(B$2:B$16=I2)*(C$2:C$16=J2),0)

这样理解:match(1, (年份列=年份)(姓名列=姓名)(地点列=地点), 0)
注意规则,保证不会出错:

  • 第一个参数写1;
  • 第二个参数多个括号相乘,有几个条件写几个括号;
  • 第三个参数用0,0 - 精确匹配;
  • 注意这个是数组函数,写完后Ctrl+Shift+Enter结束。

最后结果:

以上演示为查找第几个数据,要获取结果方法很多,可以用indirect函数、address函数、offset函数,以下为indirect函数示例:

=indirect("D" & MATCH(1,(A$2:A$16=H2)*(B$2:B$16=I2)*(C$2:C$16=J2),0)+1)

indirect函数用法很简单,如indirect("A5")获取A5单元格的值。
还有,上边公式match的结果记得要 “加1”, 因为数据是从第二行开始的啊!!

查找不到数据出错的解决:

match查找不到结果时会返回na错误,可以用isna函数进行判定,扩展上边的函数:

= if( isna(MATCH(1,(A$2:A$16=H2)*(B$2:B$16=I2)*(C$2:C$16=J2)),
       "找不到数据啊?",
       indirect("D" & MATCH(1,(A$2:A$16=H2)*(B$2:B$16=I2)*(C$2:C$16=J2),0)+1)
)

if函数的用法很简单,就不多说了,谢谢。

总结:这个方法效率不是最高的,但足以流畅运行,优点在于简单,无脑……………………因为上班时我从不带脑……
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容