求简化Excel嵌套IF公式方案:按城镇匹配对应编码
简化你的Excel嵌套IF公式
嘿,我来帮你把这个绕来绕去的嵌套公式改得清爽又好维护!先看看你原来的公式,确实嵌套太多,以后要改城镇或者代码都得一层层找,太麻烦:
=IF(ISNUMBER(SEARCH("Kirkintilloch",B2)),"BRN01",IF(ISNUMBER(SEARCH("Tweacher",B2)),"BRN01",IF(ISNUMBER(SEARCH("Lenzie",B2)),"BRN01",IF(ISNUMBER(SEARCH("Bishopbrigg",B2)),"BRN03",IF(ISNUMBER(SEARCH("Torrance",B2)),"BRN03",IF(ISNUMBER(SEARCH("Bearsden",B2)),"BRN04",IF(ISNUMBER(SEARCH("Milngavie",B2)),"BRN04")))))))
下面给你几种不同的简化方案,你可以根据自己的Excel版本和使用习惯来选:
方案1:用TEXTJOIN批量分组判断(兼容多数Excel版本)
把对应同一代码的城镇打包成一组,用|做OR分隔符,一次判断搞定一组,直接砍掉大半嵌套:
=IF(ISNUMBER(SEARCH(TEXTJOIN("|",TRUE,"Kirkintilloch","Tweacher","Lenzie"),B2)),"BRN01",IF(ISNUMBER(SEARCH(TEXTJOIN("|",TRUE,"Bishopbrigg","Torrance"),B2)),"BRN03","BRN04"))
注意:如果是Excel 2016及更早版本,输入完需要按Ctrl+Shift+Enter触发数组计算;365/2021版本直接回车就行。
方案2:用XLOOKUP+映射表(Excel 365/2021及以上推荐,最易维护)
这是我最推荐的方法——先做一个城镇-代码的映射表(比如放在D2:E8区域):
| 城镇名 | 代码 |
|---|---|
| Kirkintilloch | BRN01 |
| Tweacher | BRN01 |
| Lenzie | BRN01 |
| Bishopbrigg | BRN03 |
| Torrance | BRN03 |
| Bearsden | BRN04 |
| Milngavie | BRN04 |
然后用XLOOKUP直接匹配,后续要加城镇、改代码,直接改映射表就行,完全不用碰公式:
=XLOOKUP(TRUE,ISNUMBER(SEARCH(D:D,B2)),E:E,"未知",0)
最后那个"未知"是默认值,如果B列地址不包含这七个城镇,就返回这个内容,你可以改成自己需要的。
方案3:用SWITCH替代多层IF(Excel 2019及以上)
SWITCH比嵌套IF结构更直观,逻辑一眼就能看明白:
=SWITCH(TRUE, ISNUMBER(SEARCH("Kirkintilloch",B2)),"BRN01", ISNUMBER(SEARCH("Tweacher",B2)),"BRN01", ISNUMBER(SEARCH("Lenzie",B2)),"BRN01", ISNUMBER(SEARCH("Bishopbrigg",B2)),"BRN03", ISNUMBER(SEARCH("Torrance",B2)),"BRN03", ISNUMBER(SEARCH("Bearsden",B2)),"BRN04", ISNUMBER(SEARCH("Milngavie",B2)),"BRN04", "未知" )
虽然长度没短太多,但结构清晰,比嵌套IF好读太多。
内容的提问来源于stack exchange,提问作者Ross Craven




