5

我有一个电子表格,看起来像这样:电子表格公式,以收集所有的比赛到一个单元格

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或谷歌Apps脚本时,我不介意。请你帮我实现这个目标。

我猜这是找到D列(UniqueFamilyId)中的所有值的一种形式,即 相同,然后使用vlookup获取名字,所有这些都在数组公式中获得名字,全部收集到数组公式中。

P.S.我已经制定了如何计算有多少活在每个地址等的公式很简单

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

,但我希望所有这些名字云集,不仅是一个计数。

+0

如果你想在一个单元格中列出的结果,您将需要一些VBA援助。看到我以前的答案来获取如何做到这一点的感觉: http://stackoverflow.com/a/5504488/657668和 http://superuser.com/q/405215/76571 – Excellll 2012-04-19 13:56:30

回答

4

在谷歌电子表格,你可以使用这样的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)))) 
+0

原来,有轻微的调整,以您的第一个公式做它在一个单元格。如果你这样做=串连(ARRAYFORMULA(REPT(A:&" "; d:d = D2)))将返回所有这些结果在一个单一的答案,串连不接受阵列forumlas但与此筑巢整个事情作为一个单一的结束细胞配方。如果我是对的,请为后代编辑你的答案? – AshirusNW 2012-04-22 09:46:23

+0

@AshirusNW对不起,但你的建议是一样的。你没有测试过吗?而且,因为他们的工作一样,我始终将ARRAYFORMULA作为外层配方,包装所有其他的,即使不需要,作为一个“最佳实践”(我已经从文件论坛谷歌文档大师学习)。 – 2012-04-24 03:29:58

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键++输入。这将作为数组公式输入。

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

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

+0

这工作,谢谢。会接受,如果没有其他人能找到一个内置的阵列公式串联字符串值的方式 – AshirusNW 2012-04-19 16:50:55

相关问题