前回までで、いろいろな場所から転記する方法を学んだので、少し具体的な内容に沿って新しい処理を勉強してみましょう。
アンケート結果をまとめたい
今回の例は『毎月、従業員にアンケートをしていて、全員の結果をひとつのシートにまとめて社長に報告しているのだが、これを手作業でなく自動化したい』と考えたときにVBAを使って実現させてみましょう。
前提条件の確認
アンケートの内容と報告する方法を考えてみましょう。
どんな状態でプログラムを動かすのか。これが結構重要だったりします。例えば、「個人アンケートのExcelファイルとサマリーするExcelファイルは、どこに保存されているのか」などです。
なぜかというと、前回の新しいキーワードで出てきた”パス”が、その条件が変更することにより変わってしまうからです。地味に重要なのはプログラムを動かす環境(これを実行環境と言ったりします)も注目してもらいたいところです。
今回の環境は、以下のように同じフォルダに個人アンケートのExcelファイルと社長に報告するサマリー用のExcelファイルが入っていることにします。
サマリーするファイルの拡張子が「xlsm」であるところに気が付いたでしょうか。VBAのプログラムを記述するのは、サマリーするExcelファイル側になります。
次に、アンケート(氏名).xlsxの中身です。
三つの質問に対して「はい」「いいえ」「どちらとも言えない」を選択します。
次に社長に報告するアンケート(サマリー).xlsmの内容です。
ポイントは3つあります。
① 個人に回答された内容を一覧表にまとめます。
② 一覧表の結果を集計します。
③ 個人のシートをコピーします。
この3つの処理を別々にVBAで記述することが出来るので、最終的にすべて全自動でこの表を作ることが出来ます。ただ、一度に記述して説明をしても新しいことが多すぎて、これまでのペースを完全に逸脱した習得スピードになってしまうので、ひとつずつ進めていこうと思います。
まずは、一覧表を自動化
ということで、まずは①です。②は自分で計算したり(もしくは関数を知っている方ならそちらで)、③はマウスでドラッグ&ドロップしてもらう前提で始めます。なので、プログラムが実行される状態は以下のイメージです。
個人のシートは手動でコピーした前提です。集計は今回は関数の「COUNTIF()」を使っているので「0」になっています。この連載は関数のトピックではないので割愛しますが、興味があれば検索してみてください。
ただし、”えぇ!!マジで!!やんなきゃダメ?”と、ちょっとでも拒否反応が出た方は、スパッとここは見なかったことにしましょう。「二兎追うものは一兎も得ず」です。ゆっくりやると宣言しておきながら、私もちょっと欲張ってしまいました。
最終的にここもVBAで書き直す予定です。
やりたい処理をイメージしてみる
この段階からプログラムを書くとすると、どんな処理をイメージできるでしょうか。
(最近多い)余談ですが、自分が理解しているかどうかを確認する方法のひとつとして「言葉にしてみる」という手法があります。頭でイメージするだけだと、細部までははっきりしなくても、出来た気になってしまいますが、言葉にしてみると途中で詰まってしまったり、適当な表現が見つからなかったりすることがあります。そんな時は実際にやろうとしていることが整理できていない事が経験上、多いです。
さて、今回の処理を言葉にすると「個人シート(sheet)のアンケート結果をサマリーシート(sheet)の一覧表に転記する」という言葉でどうでしょうか。具体的には以下のイメージです。
ただ、この処理だけだと”だれ”のアンケートかわかりませんね。なので「名前」のセル(Cell)に個別シートのシート名から転記するという処理も追加しましょう。実はセルだけじゃなくてシート名の値も取ることが出来てしまうのです。
上記の2つの処理のプログラムが書くことが出来れば、同じ処理を「田中」さんと「鈴木」さんに記述すれば完成しそうです。
①の処理イメージが出来たところで、次回から具体的なプログラムの記述方法について解説していきたいと思います。