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

相關問題