- ベストアンサー
Excel VBAでの集計結果表示マクロについて
- Excel VBAを使用して、元データを集計し、新しいファイルに結果を表示するマクロを作成する方法について悩んでいます。
- 元データファイルには日付、都道府県名、区分1、区分2、内容の一覧があります。このデータから、都道府県別や内容別に集計し、結果を新しいファイルのシートに表示する必要があります。
- 集計結果は、選択した条件に基づいて、都道府県名や区分2を縦軸、区分1を常に横軸としてカウントした結果となります。また、元データの並び順や集計範囲を指定することも可能です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
初歩的なマクロは作成できるレベルと見て考え方だけ回答します。 要はデータリストの区分1の内容別にカウントアップすればいいわけですね? であれば、 1)データリストのシートとは別に記入用シートを必要数作っておいて 2)マクロでリストの上から下までを順次読み込んで 3)記入用シートに一致する行があるか確認して 4)一致する内容が既に登録されていなれば新規追加、一致内容があればそこをカウントアップ とすれば目的が達成できそうですね。 スマートとは言えないかもしれませんが、これなら繰り返し処理と条件分岐を知っていれば対応できますので、さほどマクロの知識も必要ないでしょう(^^; 都道府県の処理を例に説明すると、 (1)データシートとは別に「都道府県」シート(なんならbook分けてもいいですが)を作る。 A列に都道府県名、B列以下を区分1内容としていくわけですが、最初は空っぽでも良い。 (2)データリストの上からスタートして、B列(県名)とC列(区分1)のセルの値を読み込む 例:4行目を処理しているときは、(2)で読み込んだB4セルの値は「和歌山」、C4セルの値は「イ」になりますね。 (3)「都道府県」シートのA列(都道府県名)の上から順に(3)で得たB列の値と比較していく。 例では「和歌山」の一致行がなくて””(空白)に行きつくから、その行A列に(3)で得た値「和歌山」を書き込みます。 (4)今度はA列を右に検索していって、(3)で得た「イ」と一致するか比較する。 例では「イ」も初出になりますから、既にあるアとエの横に新たに「イ」を書き込みます。 (5)(3)で得た対象の行と、(4)で得た対象の列が交差するセルの値を+1する。 例ではD4セルを+1することになります。 | A | B | C | D | E | F | … 1| 都道府県名 | ア | エ | イ | | | 2| 北海道 | 1 | | | | | 3| 鹿児島 | | 1 | | | | 4| 和歌山 | | | 1 | | | (6)以下、データリストの一番下の行まで繰り返し、データの各行の値をいちいち出力用リストの値と比較して、該当するセルを1つインクリメントしる、という流れです。 (2)の段階で他の区分2や内容も読み込んでおいて、(3)と同様にそれぞれのシ―トでの対象行を探せばあとは同じですし、予め記入用のシートにタイトル(都道府県名や区分1の項目)を記入しておいて、データシートの2行目から処理を開始してやれば、区分1の並びも都道府県の並びも好きな初期設定で出力できます。 日付を絞るなら(2)の前にどこかのセルやinputboxで日付の上限下限を入力させておいて、(2)の処理時に範囲内のデータでなければその行をスキップして次の行に移ればいいでしょう。 マクロ走らせるたびにカウントは積み上げられていきますので、実際はマクロの最初に出力用シートの記入済み値を消すって操作を入れておいたほうがいいでしょうね。
お礼
回答をいただきましてありがとうございます。しかも簡単な方法で出来るよう示していただき、何を悩んでいたのかとおもうほど頭の中がすっきり整頓され教えていただいた考え方で思うとおりのことができました。 回答内の記入用シートを作るということが新しいファイルに集計結果を表示するという望んでいた結果にマッチし、この方法でやりたかったことが全てできました。また、最後のほうの補足も並び替えでどうしようかと思っていた点が解決しました! ありがとうございました。