我有一个看起来像这样的电子表格:
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:
我创建了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
我怀疑vlookup和数组公式的混合可以解决问题,但如果我必须使用Excel VBA或Google Apps脚本,我不介意。你能帮我解决这个问题吗。
我猜这是找到D列(UniqueFamilyId)中所有值的某种形式 相同,然后使用vlookup获取名字,所有这些都在数组公式中,以便将它们全部收集起来。
P.S。我已经弄清楚如何计算每个地址的生活数量 - 公式只是
=COUNTIF(D$1:D$65536,D1)
但我希望收集所有这些名字,而不仅仅是一个计数。
答案 0 :(得分:5)
在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))))
答案 1 :(得分:4)
使用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
此功能允许您创建以逗号分隔的列表,以汇总您拥有的标签数据。
第2步:
在表格的E2
中,粘贴以下公式,然后按 Ctrl + Shift + 输入。这将以数组公式的形式输入。
=CCARRAY(IF(D2=$D$2:$D$7,$A$2:$A$7)," ")
只需填写专栏即可。