エクセルVBAでDictionaryオブジェクトについて
エクセル2000です。
例えばA列に国名、B列に都市名、C列に団体名が切れ目なく並ぶリストがあります。
表はA列を基準にソートされています。
A列の同じ国名が終わる行のD列の1個のセルに、そこまでのC列で出てきた団体名を重複しないでカンマ区切りで表示しようと思います。
そのため、下記のようにDictionaryオブジェクトで団体名の重複を防いでいます。
Sub Test2()
Dim i As Long
Dim myStr As String
Dim myDic
Set myDic = CreateObject("Scripting.Dictionary")
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If myDic.exists(Cells(i, "C").Value) = False Then
myStr = myStr & Cells(i, "C").Value & "、"
myDic.Add Cells(i, "C").Value, ""
End If
If Cells(i, "A") <> Cells(i + 1, "A") Then
Cells(i, "D") = Left(myStr, Len(myStr) - 1)
myStr = ""
End If
Next i
End Sub
問題は、国をまたいで同じ団体名が出てきた場合、すでに上の方の国で変数myDicに登録されているため、登録されないということです。
上記コードでD列に変数myStを転記し、myStrを = ""にした時に、変数myDicの方もクリアしてしまえばいいとは思うのですが、どうやってクリアしたらよいのかわかりません。
ご教示くださいませ。
こんな感じにしたいのです。
日本 東京 abc
日本 横浜 bbc
日本 大阪 bbc
日本 名古屋 abc
日本 札幌 abc bbc、abc
韓国 ソウル kbc
韓国 プサン kkc
韓国 テグ kbc
韓国 テジョン abc
韓国 インチョン bbc kbc、kkc、bbc、abc
北朝鮮 ピョンヤン xxc
北朝鮮 テポドン xxc xxc
中国 北京 ccc
中国 南京 ccc
中国 上海 abc
中国 大連 kbc ccc、abc、kbc
表が上手く表示されませんが、各国名の最終行のB列都市名の右の1個はC列の団体名で、その右にくっついて見えるのがD列のカンマ区切りのデータです。
お礼
ご回答ありがとうございます。 詳しく書いて頂きありがとうございます。 理想とする結果がでました。 ただすいません、自分の中でもう一つ疑問がでてきまして 例えば if (openType == typeof(Dictionary<, >)) でDictionaryを判別したあとにDictionary<, >の「<,>」の中がどんな型であろうとも ループ処理をさせたいのですが、 if (openType == typeof(Dictionary<,>)) { foreach (var kvp in a as Dictionary<dynamic, dynamic>/*←これが取得できない・・・*/) { } } dynamicだと無理なようなのですが、これはどのように記述したら 列挙(ループ)可能な処理ができるようになるのでしょうか? 自分としてはDictionaryの<,>の中の型の調べ方すら分からないのですが、 もしお分かりであればアドバイス頂けないでしょうか?