0

この質問がすでに存在する場合はお詫び申し上げます。しばらく検索しましたが、何も見つかりませんでした。

Excelに2つの列があり、別の列の値が同じである1つの列の値を連結する必要があります。例として、私はこれを持っています:

A  | B
12 | Value 1
10 | Value 2
13 | Value 3
12 | Value 4
10 | Value 5

そして、私は出たいと思います:

A  | B
12 | Value 1, Value 4
10 | Value 2, Value 5
13 | Value 3

何千もの行があり、理想的には、既存のシートを破壊せずに、結果を含む新しいワークシートを作成したいと思います。列Bには、無視して連結しないようにしたい空白の値もいくつかあります。

前もって感謝します。

4

2 に答える 2

1

これを試して:

Sub combineValues()
    Dim dic As Dictionary
    Dim key, val, i, p, k
    Set dic = New Dictionary
    For i = 1 To Worksheets(1).Range("A65536").End(xlUp).Row
        key = Worksheets(1).Cells(i, 1).Value
        val = Worksheets(1).Cells(i, 2).Value
        If dic.Exists(key) Then
            dic.Item(key) = dic.Item(key) & ", " & val
        Else
            dic.Add key, val
        End If
    Next
    p = 1
    For Each k In dic.Keys
        Worksheets(2).Cells(p, 1) = k
        Worksheets(2).Cells(p, 2) = dic.Item(k)
        p = p + 1
    Next
End Sub

を使用するには、「リファレンス」に「MicrosoftScriptingRuntime」を含める必要があることに注意してくださいDictionary

次の[シート1]でテスト済み:

1   value 1
2   value 2
3   value 3
1   value 4
1   value 5
3   value 6
3   value 7
2   value 8
1   value 9
2   value 10
2   value 11
2   value 12

次の結果[シート2]:

1   value 1, value 4, value 5, value 9
2   value 2, value 8, value 10, value 11, value 12
3   value 3, value 6, value 7
于 2012-11-20T11:46:15.937 に答える
0

Passerbyの答えはうまく機能することがわかりましたが、私の場合、これを実行する列がいくつかあり、場合によっては空のセルがあります。、、、エントリを取得しないようにするために、これを追加しました。

If val <> "" Then

dic.Item(key) = dic.Item(key) & ", " & val
于 2014-03-17T16:18:32.547 に答える