问题:日常处理数据经常碰到多条件匹配问题,有些小数据需要迅速,也不值得上数据库,示例如下:
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函数的用法很简单,就不多说了,谢谢。