MS Excel - 跨多个列(标题)和行(范围)进行搜索,并根据两个条件返回相应的匹配值

MS Excel - Search Across Multiple Columns (Headers) and Row (Range) and Return Corresponding Matching Value based on Two Criterias

提问人:Miaka3 提问时间:11/14/2023 最后编辑:Mayukh BhattacharyaMiaka3 更新时间:11/15/2023 访问量:92

问:

通过使用 MS Excel 公式,我想根据两个条件返回匹配值。跨多个列(标题)搜索 - 并与相邻的单元格匹配,并在列 () 之间匹配相邻的电话号码单元格,并返回匹配号码 ()。E1:K1B2C2E2:K8E2:E8

enter image description here

识别并匹配多个相应的标题和行,并具有重复项。我想要一个公式,允许重复的记录,同时提供其唯一标识符(行号)。目前,如果找到重复项,它将返回/重复相同的第一次出现。见下图:

enter image description here

Excel 多维数组 索引 excel 公式

评论


答:

0赞 Mayukh Bhattacharya 11/14/2023 #1

尝试使用以下公式:

enter image description here


• 细胞中使用的配方A2

=MAP(B2:B12,C2:C12,LAMBDA(α,φ,FILTER(E2:E8,CHOOSECOLS(E2:K8,XMATCH(α,E1:K1))=φ)))

另外,不确定Excel版本,但对于旧版本,可以使用以下公式:

enter image description here


• 细胞中使用的配方A2

=INDEX($E$2:$K$8,MATCH(C2,INDEX($E$2:$K$8,,MATCH(B2,$E$1:$K$1,0)),0),1)

注意:上面的公式也需要填写,在退出编辑模式时,需要点击CTRL+SHIFT+ENTER


对于重复的电话号码,在源数据中:

enter image description here


• 细胞中使用的配方A2

=IFERROR(INDEX(FILTER($E$2:$E$8,CHOOSECOLS($E$2:$K$8,XMATCH(B2,$E$1:$K$1))=C2),COUNTIF(C$2:C2,C2)),"Not Found")

当源数据中存在重复项时:

enter image description here


• 细胞中使用的配方A2

=IFERROR(INDEX($E$2:$E$8,AGGREGATE(15,6,(ROW($E$2:$E$8)-ROW($E$2)+1)/
  (INDEX($E$2:$K$8,,MATCH(B2,$E$1:$K$1,0))=C2),COUNTIF(C$2:C2,C2))),"Not Found")

当有重复项时:

enter image description here


=MAP(B2:B12,C2:C12,LAMBDA(α,φ,INDEX(FILTER(E2:E8,CHOOSECOLS(E2:K8,XMATCH(α,E1:K1))=φ),COUNTIF(D2:φ,φ))))

评论

0赞 Miaka3 11/15/2023
Mayukh,感谢您的回复,很抱歉我的沟通误导了,因为我不知道我没有直接向您发表评论。非常感谢您的出色配方,它非常适合我的需求。此外,有没有办法识别重复的电话号码,但位于不同的线路上并返回相应的线路号码?
0赞 Mayukh Bhattacharya 11/15/2023
@Miaka3公式已更新
0赞 Miaka3 11/15/2023
嗨,Mayukh,我更新并提供了其他评论并重新发布,以为您提供进一步的帮助。
0赞 Mayukh Bhattacharya 11/15/2023
@Miaka3请检查我很久以前更新了答案!
0赞 Miaka3 11/15/2023
谢谢。。。非常感谢你,你为我提供了我如此迫切地想要的东西,你现在已经度过了我的一天......再次感谢...
1赞 P.b 11/14/2023 #2

每次更改问题进行编辑:

=MAP(B2:B12,C2:C12,LAMBDA(b,c,IFERROR(INDEX(FILTER(E2:E8,CHOOSECOLS(E2:K8,XMATCH(b,E1:K1))=c),SUM(N(C2:c=c))),"not found")))

或者,如果 和 的查找值可以是相同的查找值(我对此表示怀疑):PhoneFax

=MAP(B2:B12,C2:C12,LAMBDA(b,c,IFERROR(INDEX(FILTER(E2:E8,CHOOSECOLS(E2:K8,XMATCH(b,E1:K1))=c),SUM((B2:b=b)*(C2:c=c))),"not found")))

评论

1赞 Miaka3 11/15/2023
谢谢大家,不仅您快速回复了对我的询问提供的答案/解决方案......我尝试使用上述每个公式,尽管每个公式都根据需要执行,但使用“MAP”数组公式时唯一的缺点是,由于我使用的数据集的大小,它似乎可能有局限性。示例:我有来自 E1:AZ1 的列标题和列 E2:AZ2001 中的数据,并且收到错误消息“CALC”。但是,INDEX/MATCH FORMULA非常适合我的需要。
1赞 P.b 11/15/2023
我不相信地图仅限于 2000 行。你用了什么公式?
1赞 P.b 11/15/2023
在过滤器前面添加 @,这将返回第一个实例=@FILTER(...
1赞 Mayukh Bhattacharya 11/15/2023
这里不需要在开头和结尾添加。如果多次列出输出数据,则添加它不会返回其他重复项。INDEX()COUNTIFS()@
1赞 P.b 11/15/2023
@MayukhBhattacharya您可能是对的,但是如果您只通过电话号码进行检查,为什么 C 列中的第二个相同号码不应该列出与第一个相同的结果,如果不应该,为什么它不应该返回 C 中第一次出现的第二个结果?我认为缺少另一个搜索条件。