|
▼MIRURU さん:
おじゃまします。
VBA だと、こういう統合問題はDictionaryオブジェクトを
使うと思いますけど、
Office TANAKA - Excel VBA(重複しないリストを作る)
h t t p://officetanaka.net/excel/vba/tips/tips80.htm
考え方として、
「NAME,BUDHO,CODE,TYPE」を一つにまとめた(結合した)列と集計列
を考えます。
| NAME + BUSHO+ CODE +TYPE | TIME
---------------------------------------
|tanaka_Seizou_A_1 | 2
|yamada_Kensa_A_2 | 1
|tanaka_Seizou_B_1 | 1
|tanaka_Seizou_A_1 | 1
|yamada_Kensa_A_2 | 2
説明のために、もっと簡単に
うえの URL のサンプルを利用して概略を説明すると、
名前 数量
--------- --------
田中 2
鈴木 1
山田 1
鈴木 1
山田 2
田中 2
重複しない「名前」のリストを作るなら
dic("田中") = Empty
dic("鈴木") = Empty
dic("山田") = Empty
dic("鈴木") = Empty
dic("山田") = Empty
dic("田中") = Empty
↑ ↑
Key Item
Dictionaryの key に 空のItem をどんどん追加していきます。
このとき、4番目以降の key はすでにDictionaryのキーにありますから、
同じ位置にkeyを登録するという処理がなされ、結果として重複しない
キーリスト {"田中", "鈴木", "山田"}という3つのキーがリストとして
得られることになります。
集計は Item に Empty を登録する代わりに、集計したい「数量」を
入れて登録操作をしていけばいいわけです。
dic("田中") = dic("田中") + 2
dic("鈴木") = dic("鈴木") + 1
dic("山田") = dic("山田") + 1
dic("鈴木") = dic("鈴木") + 1
dic("山田") = dic("山田") + 2
dic("田中") = dic("田中") + 2
とすると、
結果として
Key Item
dic("田中") = 4
dic("鈴木") = 2
dic("山田") = 3
という3つのキーと対応する数量の合計のアイテムが得られます。
結果を出力するには、
出力したい先頭セル.Resize(dic.Count, 2).Value =
Application.Transpose(Array(dic.Keys, dic.Items))
として一括出力できます。
とまぁ、こんな感じでニュアンスのご紹介だけ(^^
|
|