ある配列があります。配列の個数は動的に決まりますが、その配列数は知ることが出来ます。
配列の中には、例えば「コーヒー, お茶, ジュース, コーヒー」といった文字列が格納されています。
すべての文字列(コーヒーでもジュースでも何でも)は、一つの配列内に2個以上含まれているかもしれないし、一個も含まれていないかもしれません。
マクロ実行のたびに新たに「ビール」という文字列が追加されているかもしれません。
このような状況で、
すべての文字列とのその文字列の個数を調べるにはどうしたらよいでしょうか。
調べた結果は
コーヒー 0
ジュース 2
ワイン 3
紅茶 8
という具合になります。
for文でぐるぐる回せば出来ることはわかっているのですが、簡単にスマートに出来る方法を教えてください。
宜しくお願いします。
Dictionaryオブジェクトを使うと便利です。
Dictionaryオブジェクトを使う前にマクロの編集画面で、
[ツール]メニューから[参照設定]の画面を開き、
"Microsoft Scripting Runtime"のチェックを入れます。
上記の設定をした上で下記のコードを実行します。
'### データが入力された配列を x() とします Dim dct As Scripting.Dictionary Set dct = New Scripting.Dictionary For i = 1 To UBound(x) If dct.Exists(x(i)) Then j = dct.Item(x(i)) dct.Remove x(i) dct.Add x(i), j + 1 Else dct.Add x(i), 1 End If Next For i = 1 To dct.Count Cells(i, 1) = dct.Keys(i - 1) Cells(i, 2) = dct.Items(i - 1) Next
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...
Dictionaryオブジェクトを使うと便利です。
Dictionaryオブジェクトを使う前にマクロの編集画面で、
[ツール]メニューから[参照設定]の画面を開き、
"Microsoft Scripting Runtime"のチェックを入れます。
上記の設定をした上で下記のコードを実行します。
'### データが入力された配列を x() とします Dim dct As Scripting.Dictionary Set dct = New Scripting.Dictionary For i = 1 To UBound(x) If dct.Exists(x(i)) Then j = dct.Item(x(i)) dct.Remove x(i) dct.Add x(i), j + 1 Else dct.Add x(i), 1 End If Next For i = 1 To dct.Count Cells(i, 1) = dct.Keys(i - 1) Cells(i, 2) = dct.Items(i - 1) Next
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...
ありがとうございます!
"Microsoft Scripting Runtime"ですか。。
見たことないですが、早速試してみます。
ありがとうございました!
ピポッドテーブルを用いて集計しては如何でしょうか?
マクロに組み込む事も可能です。
残念ですが、すべて変数上で行いたいのです。
データの管理とUIは完全別個がベターです。
ありがとうございます!
"Microsoft Scripting Runtime"ですか。。
見たことないですが、早速試してみます。
ありがとうございました!