人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【エクセルVBA】
ある配列があります。配列の個数は動的に決まりますが、その配列数は知ることが出来ます。

配列の中には、例えば「コーヒー, お茶, ジュース, コーヒー」といった文字列が格納されています。
すべての文字列(コーヒーでもジュースでも何でも)は、一つの配列内に2個以上含まれているかもしれないし、一個も含まれていないかもしれません。
マクロ実行のたびに新たに「ビール」という文字列が追加されているかもしれません。

このような状況で、
すべての文字列とのその文字列の個数を調べるにはどうしたらよいでしょうか。
調べた結果は

コーヒー 0
ジュース 2
ワイン 3
紅茶 8

という具合になります。
for文でぐるぐる回せば出来ることはわかっているのですが、簡単にスマートに出来る方法を教えてください。
宜しくお願いします。

●質問者: にぎたま
●カテゴリ:コンピュータ
✍キーワード:VBA いるか お茶 エクセル コーヒー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● gong1971
●65ポイント ベストアンサー

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"ですか。。

見たことないですが、早速試してみます。

ありがとうございました!


2 ● oxlip
●5ポイント

ピポッドテーブルを用いて集計しては如何でしょうか?

マクロに組み込む事も可能です。

◎質問者からの返答

残念ですが、すべて変数上で行いたいのです。

データの管理とUIは完全別個がベターです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ