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

Ash*_*Ash 5 google-sheets array-formulas google-sheets-formula

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

A             B              C          D                
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:
Run Code Online (Sandbox Code Playgroud)

我创建了UniqueFamilyId列,以便基本上唯一地标识每个系列.

我正在尝试制定一个公式,将所有居住在同一地址的人的名字收集到一个单元格中 - 即一个将填写E列(AllFirstNames)的公式.

A             B              C          D                    E
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
Run Code Online (Sandbox Code Playgroud)

我怀疑vlookup和数组公式的混合可以解决问题,但如果我必须使用Excel VBA或Google Apps脚本,我不介意.请帮我解决这个问题.

我猜这是找到D列(UniqueFamilyId)中相同的所有值的某种形式,然后使用vlookup获取名字,所有这些都在数组公式中将它们全部收集起来.

PS我已经弄清楚如何计算每个地址的生活数量 - 公式很简单

=COUNTIF(D$1:D$65536,D1)
Run Code Online (Sandbox Code Playgroud)

但我希望收集所有这些名字,而不仅仅是一个计数.

Hen*_*reu 5

在Google Spreadsheet上,您可以像这样使用ArrayFormula:

=ArrayFormula(concatenate(rept(A:A&" ";D:D=D2)))
Run Code Online (Sandbox Code Playgroud)

只需将其粘贴在单元格上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))))
Run Code Online (Sandbox Code Playgroud)