在Excel中连接多个匹配
请看下面
我想将表2中的“注释”连接到表1中,如图像序列所示,而不使用TEXTJOIN()或macros。 只使用常规的Excel函数
没有使用UDF或帮助列没有简单的解决scheme。 我会build议使用UDF公式,这是很容易实现和在工作表中使用。 要使用这种方法,请在regular module
(模块1)中input此代码。
Function Lookup_concat(Search_string As String, _ Search_in_col As Range, Return_val_col As Range) Dim i As Long Dim result As String For i = 1 To Search_in_col.Count If Search_in_col.Cells(i, 1) = Search_string Then result = result & " " & Return_val_col.Cells(i, 1).Value End If Next Lookup_concat = Trim(result) End Function
现在,您可以像使用常规工作表公式一样使用此UDF。 在单元格I3
input这个公式=Lookup_concat(G3,$D$3:$D$12,$E$3:$E$12)
并将其拖动到底部。
如果您只想使用常规公式,则需要input以下公式=IFERROR(INDEX($D$3:$E$12, SMALL(IF(($G3=$D$3:$D$12), ROW($D$3:$D$12)-MIN(ROW($D$3:$D$12))+1, ""),COLUMNS($A$1:A1)), 2),"")
SHIFT + ENTER组合,因为它是一个数组公式。 现在把formmula拖到右边和下边(估计你的公式需要走多远才能捕获所有的唯一值)。
然后在单元格J3
input此公式=CONCATENATE(K3," ",L3," ",M3," ",N3," ",O3," ")
,并将其拖动到底部(将公式估计为唯一值的估计数)。
你将需要添加一个帮手列来实现你的目标。
假设你有helper column C
,这是数组公式(意味着你必须点击Ctrl + Shift + Enter ),你应该尝试:
{=IF(OR(ROW(C1)=1,MAX(--($A$1:A1=A2)*ROW($A$1:A1))=0),B2,INDEX($C$1:C1,MAX(--($A$1:A1=A2)*ROW($A$1:A1)))&", "&B2)}
现在在column G
假设这是你想得到结果的地方,你可以input这个数组公式(意味着你必须点击Ctrl + Shift + Enter ):
{=IFERROR(INDEX($A$2:$C$11,MAX(--($A$2:$A$11=E2)*ROW($A$2:$A$11))-1,3),"")}
这样你应该得到你期待的结果。
有一个简单的方法来做到这一点。 :)请参阅这个Google表格以获得一个工作示例。
您可以使用FILTER和JOIN函数来实现这一点:
=iferror(join(", ", filter(E$3:E$12, D$3:D$12 = G3)))
在上面的示例中,FILTER函数将查看单元格D3:D12
并尝试查找与G3
的值匹配的行。 对于匹配的行,FILTER函数返回单元格E3:E12
的值作为数组。
JOIN用于连接数组项目和中间的逗号。
最后,IFERROR摆脱由于FILTER不匹配而导致的N/A
错误。
(荣誉原始的答案在这里https://stackoverflow.com/a/23367059/36817 )