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列を作成しました。

同じ住所に住むすべての人の名を1つのセルに集める式、つまり列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と配列数式を組み合わせてもうまくいくと思いますが、ExcelVBAまたはGoogleApps Scriptsを使用する必要がある場合は、問題ありません。これを達成するのを手伝ってくれませんか。

これは、列D(UniqueFamilyId)で同じであるすべての値を検索し、vlookupを使用して名を取得し、すべて配列数式内でそれらをすべて収集する何らかの形式だと思います。

PS私は各住所に住んでいる人の数を数える方法を考え出しました-式は単純です

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

しかし、私はそれらの名前をすべて集めてほしいのです。単なるカウントではありません。

4

2 に答える 2

5

Googleスプレッドシートでは、次のようなArrayFormulaを使用できます。

=ArrayFormula(concatenate(rept(A:A&" ";D:D=D2)))

セルE2に貼り付けてからコピーしてください。

[編集]

もう少し遊んでみると、すべてを1つのセル(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))))
于 2012-04-20T12:06:03.247 に答える
4

VBA関数を使用すると、一致を1つのセルにまとめることができます。以下の関数を何度も使用して、値の配列を連結しました。これは、組み込み関数では実行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ますEnter。これにより、配列数式として入力されます。

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

単に列に記入するだけで、それでうまくいくはずです。

于 2012-04-19T14:07:40.020 に答える