Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


24207 / 76732 ←次へ | 前へ→

【57876】Re:データ集計の方法
発言  kanabun  - 08/9/18(木) 16:52 -

引用なし
パスワード
   ▼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))
として一括出力できます。

とまぁ、こんな感じでニュアンスのご紹介だけ(^^
0 hits

【57874】データ集計の方法 MIRURU 08/9/18(木) 16:06 質問
【57876】Re:データ集計の方法 kanabun 08/9/18(木) 16:52 発言
【57878】Re:データ集計の方法 Hirofumi 08/9/18(木) 20:08 回答
【57880】Re:データ集計の方法 kanabun 08/9/18(木) 21:47 発言
【57881】Re:データ集計の方法 kanabun 08/9/18(木) 21:59 発言
【57937】Re:データ集計の方法 MIRURU 08/9/22(月) 11:30 お礼

24207 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free