Google Sheets中INDEX/MATCH公式无法提取司机多匹配位置求助
解决Google Sheets司机多装货地点匹配问题
问题背景
- 为货车调度员制作调度表,新增
Samsara import标签,可导出CSV直接上传至Samsara创建路线。 - 当前M列使用公式
=iferror(INDEX($F$3:$F,MATCH(N61,$C$3:$C,0)))匹配司机对应的装货地点,但仅能返回第一个匹配结果。 - 实际场景中司机常被调度至第二个不同装货点,例如M19单元格应显示司机的第二个地点Alvadore,却只返回第一个匹配的Mudmasters WV。
- 尝试用FILTER公式实现多匹配,但无数据时会报错,需求是同时列出司机的第一、第二个装货地点。
解决方案
1. 单个单元格合并显示两个地点
在M列对应单元格输入以下公式,会将司机的第一、第二个装货地点用逗号分隔显示,无匹配时返回空值:
=IFERROR(TEXTJOIN(", ", TRUE, INDEX($F$3:$F, SMALL(IF($C$3:$C=N61, ROW($C$3:$C)-ROW($C$3)+1), {1,2}))), "")
- 原理:通过
IF筛选出匹配当前司机的所有行号,SMALL提取第1、2个匹配行的相对位置,INDEX对应到F列的装货地点,TEXTJOIN将两个结果合并为一个字符串,IFERROR处理无匹配的异常情况。
2. 分开显示第一、第二个地点
如果需要将两个地点分别放在不同单元格(比如M列显示第一个,相邻列显示第二个),可使用以下公式:
- 第一个装货地点:
=IFERROR(INDEX($F$3:$F, SMALL(IF($C$3:$C=N61, ROW($C$3:$C)-ROW($C$3)+1), 1)), "")
- 第二个装货地点:
=IFERROR(INDEX($F$3:$F, SMALL(IF($C$3:$C=N61, ROW($C$3:$C)-ROW($C$3)+1), 2)), "")
注意事项
- 旧版Google Sheets中输入上述数组公式后,需按
Ctrl+Shift+Enter确认;新版Google Sheets通常会自动识别数组公式,直接回车即可。
内容的提问来源于stack exchange,提问作者Jonathan Nolan
相关产品推荐
相关产品推荐

