如果行中有匹配,则返回列名,查找多个匹配项

我有一个桌子,部分如下;

--------------- | Part number | --------------- | 123456 | | 16D345 | | 16E099 | | 490586 | | 970884 | --------------- 

另一个像这样;

 --------------------------------------------------- | Part number | 940822 | 940922 | 170345 | 940222 | --------------------------------------------------- | 123456 | X | | X | X | | 16D345 | X | | X | | | 16E099 | | X | | X | | 490586 | X | | X | X | | 970884 | | | X | | --------------------------------------------------- 

第二个表中列的数字是“单位”。
我试图弄清楚如何得到一个零件有X的所有单位数字。基本上我想最终得到以下结果:

 ---------------------------------------- | Part number | Used in | ---------------------------------------- | 123456 | 940822, 170345, 940222 | | 16D345 | 940822, 170345 | | 16E099 | 940922, 940222 | | 490586 | 940822, 170345, 940222 | | 970884 | 170345 | ---------------------------------------- 

现在我刚刚学会了如何使用INDEX和MATCH,但还没有得到我想要的结果。 我试过使用数组公式,但我还不明白。

如果您订阅了Office 365 Excel,则可以使用以下数组公式:

 =TEXTJOIN(", ",TRUE,IF(($E$2:$H$6 = "X")*($D$2:$D$6=A2),$E$1:$H$1,"")) 

作为一个数组公式,在退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter来确认。 如果正确完成,则Excel将在公式周围放置{}

在这里输入图像说明


如果您没有Office 365,则可以将此代码放在附加到工作簿的模块中,并使用上述的公式:

 Function TEXTJOIN(delim As String, skipblank As Boolean, arr) Dim d As Long Dim c As Long Dim arr2() Dim t As Long, y As Long t = -1 y = -1 If TypeName(arr) = "Range" Then arr2 = arr.Value Else arr2 = arr End If On Error Resume Next t = UBound(arr2, 2) y = UBound(arr2, 1) On Error GoTo 0 If t >= 0 And y >= 0 Then For c = LBound(arr2, 1) To UBound(arr2, 1) For d = LBound(arr2, 1) To UBound(arr2, 2) If arr2(c, d) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c, d) & delim End If Next d Next c Else For c = LBound(arr2) To UBound(arr2) If arr2(c) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c) & delim End If Next c End If TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) End Function