[[20141117145651]] 『重複しない文字列の抽出〜結合』(KAO) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『重複しない文字列の抽出〜結合』(KAO)

あきらめていたことができるような気がしてお尋ねします。

C列の同じ名前の中からD列の重複しない文字列のみ抽出して
A列の同じ名前のB列に結合して書き出すことは可能でしょうか?
例)

 A      B                 C      D
 エミ   命,123,りんご   ミホ   みかん,561,果物 
 ミホ   561,ミカン      エミ   命▼愛,119
                          エミ   123,119,りんご,愛
                          ミホ   果物,トマト▼みかん
                          ミホ   トマト,ミカン

・B列の文字列間の結合は「,」でお願いします
・D列の文字列間の結合は「,」「▼」が使用されてます
・A列に重複はありません(空欄なし)
・C列は重複があり順不同になっています(通常1万行までです)

よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 こんな感じでどうでしょうか?
    Sub KAO重複抽出()
        Dim a
        Dim dic As Object, k As String, x
        Dim r As Long
        Set dic = CreateObject("Scripting.Dictionary")
        a = Range("C1", Cells(Rows.Count, "C").End(xlUp)).Resize(, 2).Value
        For r = 1 To UBound(a, 1)
            k = a(r, 1)
            If Not dic.exists(k) Then dic.Add k, CreateObject("Scripting.Dictionary")
            For Each x In Split(Replace(a(r, 2), "▼", ","), ",")
                If dic(k).exists(x) Then
                    dic(k)(x) = "重複"
                Else
                    dic(k).Add x, ""
                End If
            Next x
        Next r
        Range("B:B").ClearContents
        a = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Resize(, 2).Value
        For r = 1 To UBound(a, 1)
            k = a(r, 1)
            If dic.exists(k) Then
                For Each x In dic(k).keys
                    If dic(k)(x) <> "重複" Then a(r, 2) = a(r, 2) & "," & x
                Next x
            End If
            a(r, 2) = Mid(a(r, 2), 2)
        Next r
        Range("A1").Resize(UBound(a, 1), 2).Value = a
    End Sub
 ※1533細かいところ修正
(稲葉) 2014/11/17(月) 15:22

稲葉様、 早々にありがとうございます。

やはりできちゃうんですね、こんなことが..できる人にはですが^^。

データ行が2行目からなら2箇所の >For r=1< の「1」を「2」で
いいんですよね?

初めて目にする単語^^?も多くとうてい中身わかっていませんし、
実際のデータで確認できる環境まで時間がかかりそうなので、
先ずはお礼までとさせていただきます。
(KAO) 2014/11/17(月) 16:33


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.