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

问题描述 投票:5回答:2

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

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)

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

google-sheets google-sheets-formula array-formulas
2个回答
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))))

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

此功能将允许您创建用逗号分隔的列表以汇总您拥有的标签数据。

STEP 2:在表格的E2中,粘贴以下公式,然后按Ctrl + Shift + Enter。这将作为数组公式输入。

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

只需填写该列,就应该这样做。

© www.soinside.com 2019 - 2024. All rights reserved.