(読了時間=約 3 分)
現場でいちいち教えてられない細かいテクニックシリーズ(笑)。連続投稿の5発目となる今日は、データをDB化(データベース化)して取り込むには、です。
今日のお題

今日のお題は、アンケートの集計です。
コンサルとしての経験分野を聞くアンケートで、横軸に業界・縦軸にテーマをとって、経験ある領域にチェックを入れてもらうというもの。経験の度合いによってチェックは三段階(X〜XXX)とします。
アンケートとしてはありがちなんですが、これって集計が大変なんですよね。そこのところをあまり考えず社内に一斉送信しちゃって、上図のように回答が返って来はじめてる。こんな状況を想定してください。
「これ、集計どうするつもりだった?」
「( ゚д゚)ハッ!、、、結構たいへんですね。ジュニアを1名アサインしましょう」
みたいな話になりがちですが、ここからでも手間なく集計結果をデータベース化できるやり方はあります。それを順を追って説明していきます。
まずはエラーチェック
まずはエラーチェック用のモジュールを作っていきます。
エクセルそのままで配布しちゃってるので、回答者がどうにでも変更できてしまいます。特に人数が多くなると思わぬことをする人が必ず出てくるのでチェックは欠かせません。そのモジュールを作ります。

エラーチェックモジュールは前回説明してますので、さくっと行きます。
まずは表の縦軸と横軸が変えられてないか。①②で横軸を、③④で縦軸のチェックモジュールを作ります。
次に、回答のチェック欄ですが、ここでは、エラーチェックをしつつ、DBに収納するための数値化も行っていきます。
回答はX〜XXXまでの三段階あって、それぞれに応じた処理が必要になるので「IFS」関数を使います。「IFS」というのは「IF」の複数形ですね。具体的には下記のような書き方になります。
=IFS(条件式1,条件に合う場合の処理1,条件式2, ・・・)
D23から見ると対象のセルがD6になるので、下記の様に処理をしていきます。
- D6=””(空欄)なら 0
- D6=”X” なら 1
- D6=”XX” なら 2
- D6=”XXX” なら 3
- それ以外 なら 999
それ以外というのはエラーということです。ここは分かりやすいように999としておきます。これをIFS文で書くと
= IFS(D6=””, 0, D6=”XX”, 1, D6=”XX”, 2, D6=”XXX”, 3 ,TRUE, 999)
最後の「TRUE」というのは「それ以外」という意味です。何でそうなのかわかりませんが、とにかく呪文だと思ってそう書いてくださいw
で、完成完成したのを再度掲載します。

エラーを修正する
エラーが出たら修正しておきます。
ただ修正するだけだと、後で元が何だったか知りたくなった時に面倒なので、元バージョンも作っておいて、どこをどう修正したかがわかるようにしておきます。

ちょっと手間ではあるんですが、こういう手間を惜しまないのが後で混乱しないコツです。
とにかく作業記録は辿れるようにしておく。慣れてしまえば大した時間はかかりませんから。習慣づけておくことが重要です。
データをDB的に整形する
この種のデータを分析するには、データベースの様な形式のデータを作るのが便利です。データベースというのは横軸にデータ項目があって、レコード(ここで言う、特定の人からの回答)が1行で記載されているようなものです。

イメージとしてはこんな感じ。今は縦軸・横軸に別れているデータ項目が横一線にならび、その下に、各人の1行づつ回答が記録されています。
こういうデータ形式に整えて行きます。

①でまずデータ項目を作ります。結構、横に長くなって、かつ縦軸のテーマごとに横軸の業種が何度も繰り返される形になります。
データ項目の記載部分は、テーマが変わるごとに色を変えています。これによって、ただ文字が並ぶのでなく、規則性ある並び方になっていること明確に示されます。データ項目を探しやすくなるので、作業上の負担が軽減されるわけです。こうした細かい工夫により長時間集中力を発揮できるようになるので、軽んじることなく徹底することが重要です。
で、②で名前のデータを持ってきたら、次はアンケートの回答です。ここは先程エラーチェックと合わせて行った数値化データを引いてきます。
一旦③のように同じ形でデータを参照した面を作ってしまい、次に、特定の行だけを選択してドラッグ・アンド・ドロップで移動させます。1つ1つ作って行くやり方もありますが、この程度の行数であればこっちの方が早いです。
ドロップする際に、選択範囲を項目行の色の変わり目が一致することを確認しながらやれば、データがずれてまま作ってしまうリスクを軽減できます
作ったものをモジュール化する
こうして作ったものを、他の回答者のシートにも貼り付けやすいようモジュール化します。

20行目にエラーチェックのサマリを記載します。使っている関数はCOUNTIFで、
COUNTIF(範囲, 条件)=対象範囲で条件に合うセルの数
横軸と縦軸のチェックでは、エラーが1で問題なければ0ですから、”>0″の数を数え、解答欄ではエラーは”999″ 出すようにしているのでその数を数えさせています。
で、ここまで作成したら、21〜32行を選択してグループ化します。これを閉じればモジュールの完成です。
畳んだ時の画面はこんな感じ。例によって、モジュールの始まる行は切りの良い行数(ここの例では20行目)にしています。

エラーチェックの結果だ大事であって、チェック過程は必ずしも見る必要はありません。それを畳むことによって、対象となるアンケート回答とモジュールの両方を一つの画面に中に置くことができます。(いちいちスクロールしなくて良いので目の負担が軽減されます)
モジュールをコピーする際にも、畳んでおけば見た目で2行を選択してコピーすれば良いので、マウスでスクロールしてって行き過ぎたりということもなく、時間を短縮できます
データベースにデータを収納
上のモジュールで33行目を畳んでいないのがポイントです。
モジュールをコピーして、エラーを修正したら、33行目をコピーして、DBシートに貼り付けます。

上のDBシート、A〜B列が空欄になっているのが分かると思います。
普通は左詰めで作るものをわざわざ開けているのは、アンケートシートに貼り付けたモジュールと横軸を完全に合わせるためです。
これによって、モジュールの33行目を選択して、それをそのまま貼り付ければ良くなります。
(ここを合わせないと、行だけでなく列方向も範囲指定してコピーする必要が出てきます。たった1アクションですが、数が増えると負担になります)
数が多くなったらマクロを組むが
作業を効率化するというと、効率化できるやり方に執心してものすごい時間をかける人がいますが、意外に目をつぶって単純作業をやり切っちゃった方が早い場合も結構あります。
今回の例は、実際にあった例をもとに構成しているのですが、その時は回収した回答が50件弱だったので、モジュールを貼り付けて、データをまたコピペするという作業を手作業で行いました。
でも例えば数百件にもなるということであれば、別途マクロを組んで処理をしていくと思います。
このように、「手作業でやる」vs「効率的な仕掛けを作る」の天秤を常に考えながら作業を進めるという視点が重要です。
ということで本日はここまで。
ジュニアメンバーが要領悪くやってるのを見て、何故こんなことも思いつかないんだろうと思ってたんですが、実際に書いてみると結構複雑ですね。
ということで、改めてこのシリーズの大事さを認識した回でした(笑)
ではまた!