电子表格公式将所有匹配收集到一个单元格中

我有一个电子表格,看起来像这样:

ABCD FirstName SurnameName Address UniqueFamilyId --------------------------------------------------------- Abe Black 1 Elm Ave :Black:1 Elm Ave: Joe Doe 7 Park Ln :Doe:7 Park Lane: Jack Black 1 Elm Ave :Black:1 Elm Ave: Bill Doe 2 5th Ave :Doe:2 5th Ave: Harry Doe 7 Park Ln :Doe:7 Park Lane: Sam Doe 7 Park Ln :Doe:7 Park Lane: 

我创build了UniqueFamilyId列来唯一地标识每个家族。

我试图找出一个公式,将所有居住在同一个地址的人的名字都收集到一个单元格中 – 也就是填写E列(AllFirstNames)的单元格。

 ABCDE FirstName SurnameName Address UniqueFamilyId AllFirstNames ------------------------------------------------------------------------------- Abe Black 1 Elm Ave :Black:1 Elm Ave: Abe Jack Joe Doe 7 Park Ln :Doe:7 Park Lane: Joe Harry Sam Jack Black 1 Elm Ave :Black:1 Elm Ave: Abe Jack Bill Doe 2 5th Ave :Doe:2 5th Ave: Bill Harry Doe 7 Park Ln :Doe:7 Park Lane: Joe Harry Sam Sam Doe 7 Park Ln :Doe:7 Park Lane: Joe Harry Sam 

我怀疑混合使用vlookup和数组公式会混淆,但如果我必须使用Excel VBA或Google Apps脚本,我不介意。 你能帮我实现吗?

我猜这是find列D(UniqueFamilyId)中的所有值都是相同的,然后使用vlookup来获取名字的一种forms,所有在一个数组公式中,以收集他们。

PS我已经计算出了如何计算每个地址有多less人住 – 公式很简单

 =COUNTIF(D$1:D$65536,D1) 

但是我想要收集所有这些名字,而不仅仅是一个数字。

在Google电子表格中,您可以像这样使用ArrayFormula:

 =ArrayFormula(concatenate(rept(A:A&" ";D:D=D2))) 

只要将它粘贴到单元格E2然后复制下来。

[编辑]

再玩一会儿,我知道有可能在一个单元格上完成(E2)。 即没有必要复制下来。 自然,这是更复杂的方式:)但在这里你去:

 =ArrayFormula(transpose(split(concatenate(transpose(if(D2:D=transpose(D2:D);A2:A&" ";"")&if(row(D2:D)=rows(D2:D)+1;char(9);"")));char(9)))) 

使用VBA函数将允许您在一个单元格中总结您的匹配。 我多次使用这个函数来连接一个值的数组 – 一些内置的函数CONCATENATE()不能做的。

步骤1:
按Alt + F11打开Excel中的VBA编辑器窗格。 插入一个新的模块,并粘贴在这个代码中的自定义函数。

 Public Function CCARRAY(rr As Variant, sep As String) 'rr is the range or array of values you want to concatenate. sep is the delimiter. Dim rra() As Variant Dim out As String Dim i As Integer On Error GoTo EH rra = rr out = "" i = 1 Do While i <= UBound(rra, 1) If rra(i, 1) <> False Then out = out & rra(i, 1) & sep End If i = i + 1 Loop out = Left(out, Len(out) - Len(sep)) CCARRAY = out Exit Function EH: rra = rr.Value Resume Next End Function 

该function将允许您创build逗号分隔列表来总结您所拥有的标签数据。

第2步:
在表格中的E2中,粘贴以下公式并按Ctrl + Shift + Enter 。 这将作为一个数组公式input。

 =CCARRAY(IF(D2=$D$2:$D$7,$A$2:$A$7)," ") 

只需填写列,这应该做到这一点。