PR

 こんにちは。クジラ飛行机です。本連載では、日本語プログラミング言語「なでしこ」を使って、仕事で役立つプログラムを作っていきます。

 今回は、複数Excelファイルのアンケートを集計するプログラムを作ってみます。

 最近、Excelを使ったアンケートを見かけます。アンケートの回答者に、メールで、Execlファイルが送られてきて、これの必要な項目を埋めて、アンケートの実施者に返信するというものです。Excelなら、複数の選択肢から回答を選んでもらったり、入力範囲を指定したりと、回答の指定が細かく指定できるので、アンケートを作るのにもぴったりです。

 しかし、アンケートの実施者の方はどうでしょうか?Excelを1枚ずつ開いて、手作業で集計するなんて面倒なことしていませんか?簡単なプログラムを作れば、あっという間に集計できます。

今回のプログラム

 まず、完成したプログラムから見ていきましょう。ただ、その前に、どんなアンケートなのか、Excelのファイルを確認してみます。

図1 回答者に配られるアンケート

 各項目には、Excelのメニューから[データ - 入力規則]を適用しました。選択肢から選んでもらうにはリストを、その他の項目は整数にして、適正な範囲を指定しました。

 そして、アンケートの集計プログラムは以下の通りです。

【プログラムソース1】

#---------------------------------------
# 簡易アンケート集計
#---------------------------------------
# 初期化
性別@「男」は0。 # --- (*1)
性別@「女」は0。 #
TV時間合計は0。 #
睡眠時間合計は0。  #
人数は0。      #
性別セル位置=「C4」。 #---(*2)
TV時間セル位置=「C5」。 #
睡眠時間セル位置=「C6」。 #
フォルダ選択して対象フォルダに代入。
# 処理
エクセル起動。 #---(*3)
対象フォルダ&「*.xls」をファイル列挙。
それを反復
  対象フォルダ&対象をエクセル開く。#---(*4)
  人数=人数+1
  性別セル位置のエクセルセル取得して回答に代入。 #---(*5)
  性別@回答=性別@回答+1。 #
  TV時間セル位置のエクセルセル取得して回答に代入。 #---(*6)
  TV時間合計=TV時間合計+回答。          #
  睡眠時間セル位置のエクセルセル取得して回答に代入。#---(*7)
  睡眠時間合計=睡眠時間合計+回答。 #
  エクセルブック閉じる。
エクセル終了。
# 結果の表示
TV時間平均=TV時間合計÷人数。#---(*8)
睡眠時間平均=睡眠時間合計÷人数。
「人数:{人数}
性別:男性={性別@男}, 女性={性別@女}
TV時間平均:{TV時間平均}
睡眠時間平均:{睡眠時間平均}」を言う。
終わり。

【プログラムの使い方】

 複数のアンケートExcelファイルを1つのフォルダにコピーしておきます。そして、プログラムを実行したら、処理するフォルダを尋ねられるので、フォルダを指定します。

 フォルダを指定すると、そのフォルダにあるExcelファイルを1つずつ開いて、アンケートを集計します。全てのファイルを調べたら、以下のように実行結果を表示します。

8-runimage.gif
図2 実行結果を表示したところ

プログラムの流れ

 それでは、プログラムの大まかな流れから確認してみます。流れとしては以下のような按配です。

(1)プログラムで利用する変数を初期化する
(2)ユーザーが処理するExcelファイルのフォルダを選択する
(3)フォルダ中のExcelファイルを1つずつ以下の4~5の処理を行う
(4)Excelファイルを開く。
(5)アンケートの1項目ずつを調べて対応する変数を加算する
(6)集計結果を表示する

 今回のプログラムは、複雑な集計を行うわけではなく、単純にアンケートの男女比と、TVを見ている時間・睡眠時間の平均を調べているだけです。ですので、プログラムの流れさえ掴んでしまえば、自分用にプログラムを書き変える時に、どこをどう修正すれば良いのか見えてくると思います。

 プログラム中の(*1)では、集計に使う変数を「0」に初期化しています。初期化の時、『性別@「男」は0』のような書き方がありますが、これはハッシュ変数というもので、1つの変数の中に複数の値を覚えておきたい時に使います。

 (*2)では、各アンケート項目の回答の位置を指定しています。Excelは水平方向にABCD…と列番号がついており、垂直方向に123…と行番号がついています。それで、回答のセルの位置を「A3」とか「C6」などのような方法で指定します。

 (*3)では、「エクセル起動」命令を実行して、以後Excelに関連する命令が使えるようにします。

 (*4)では、実際にExcelのファイルを開きます。そして、(*5)では性別の回答を取得し、変数に足します。(*6)では、TVを見ている時間を取得し、変数に足します。(*7)も同様に、睡眠時間を処理します。

 各ファイルを調べ終わった後、(*8)で合計を人数で割って平均時間を計算し、その後結果を表示します。

プログラムの説明

 今回利用した機能で目立ったものは、Excel関連の命令、それから、1つの変数に複数の値を入れるハッシュ変数です。

・Excel関連の命令について

 まずは、Excelの命令について紹介します。Excel関連の命令は、必ず、「エクセル起動」で始まり「エクセル終了」で終わるようにします。そうしないと、Excelが起動しっぱなしになってしまいますので注意しましょう。

 そして、Excelのファイルを開くのが『(ファイル名)のエクセル開く』命令で、特定のセルの値を取り出すのが『(セル位置)のエクセルセル取得』命令です。また、開いているファイルを閉じるのが『エクセルブック閉じる』命令です。

このあたりのExcel関連の命令は、名前を見ればだいたい使い方が分かるのではないでしょうか。日本語プログラミングの良い点です。

・ハッシュ変数について

次に今回はじめて出てきたハッシュ変数ですが、これは、以下の書式で書くと、普通の変数と同じように使えます。

ハッシュ変数@項目名=代入値。

 今回出てきたのは、『性別@「男」』や『性別@「女」』という変数です。変数の書き方こそ違いますが、普通の変数と同じように使えます。

【プログラムソース2】

性別@「男」=8
性別@「女」=2
性別@「男」を表示。
性別@「女」を表示。

ただ、普通の変数より優れているところは、アットマークの後ろの「男」とか「女」という部分を変数で指定できるところです。

例えば、アンケートの集計の部分では、回答に「男」か「女」が代入されています。そこで、回答が仮に「女」だったとしたら次のような処理が行われることになります。

【プログラムソース3】

性別とはハッシュ。
性別@「男」=8
性別@「女」=2

回答は「女」
性別@回答=性別@回答+1

性別を表示。

8-hash.gif
図3 ハッシュ変数では1つの変数に複数の値を代入することができます

まとめ

 今回は、簡単なアンケートの集計プログラムを作ってみました。手作業でやると大変な仕事が、プログラミングによって、一瞬で終わるのを体験できたでしょうか。

 このプログラムでは、内容をやさしくするために、各項目について1つずつ値をとって簡単な足し算を行うだけの集計を行いました。本体なら、男女別に睡眠時間とTVを見ている時間の関連を調べるための集計を行いたいところです。また、アンケートの項目数が多い場合は、1つ1つ値をとるのが大変なので、一度に値をとってきておいて、そこからさらに集計作業を行う必要があるかもしれません。

 このような少し複雑な集計を行う場合でも基本は同じです。どんなに複雑なプログラムでも、1つ1つの処理自体は、単純なプログラムの積み重ねで成り立っています。

 それでは。

はじめてこの連載を読む方へ
 この連載では、日本語でプログラムが書ける「なでしこ」というツールを使って仕事に役立ちそうなプログラムを紹介しています。なでしこのプログラムエディター(なでしこエディタ)に、記事中で紹介しているプログラムソースをコピー・アンド・ペーストし、実行ボタンを押すだけで、プログラムを動作させることができます。詳しい内容は本連載第1回をご覧ください。


【PCオンライン編集部からのお願い】
「なでしこ」は個々のユーザーの責任において利用してください。
コラムで紹介するなでしこのプログラム動作については編集部でも確認していますが、すべてのユーザーのパソコン環境で同じように動作することを保証するものではありません。
申し訳ありませんが、紹介する内容について、個別のご質問にはお答えしかねます。なでしこの公式ページでは詳しいマニュアルや質問を受け付ける掲示板が提供されていますので、そちらをご参照ください。
よろしくお願いいたします。