改正版、【アンケート自動生成VBA】

前回の反省点を元に機能を追加

この記事は過去記事を元に作成しています↓↓
bimori466-1.hatenablog.com


エクセルでアンケートを鬼のように作成されている方の助けになればと作成した記事です。

前回の4つ反省点として
1 入力支援フォームの作成(「質問Sheet作成入力フォーム」を作る。)
2 アンケートの質問文字列を「FrameのCaption」ではなく、「LABELのCaption」にする。
3 「← 前へ」をクリックしたときに、前回回答した問題にチェックを入れる。
4 回答集計Bookも自動で作成する。

がありました。

この4つのうち、1、2、4について機能を追加しました。この追加機能をメインに解説していきます。


1 閲覧対象者

1 エクセルVBAのユーザーフォームでアンケートマクロを作成したい初心者の人。
2 エクセルでアンケートをたくさん作っている人。
3 Microsoft365 Formsの環境がない方(便利らしいです)。

2 得られる効果

エクセルのフォーム機能で「ちまちま」アンケートを作る単純作業からの解放。

3 設計

全体の設計は、過去記事を参照願います。
追加機能の設計について書いていきます。

1【入力支援フォーム】について

アンケートフォームを作るために必要なSheetへの入力方法を、ユーザーが意識することなくこのフォームから入力すればOKなものです。

前提として、回答方法は、
1 単一回答(OptionButton) 
2 複数回答(CheckBox)
3 自由形式(TextBox)

以上3つです。

<実際の動作動画 新規作成>




<実際の動作動画 既存追加 *職業を追加する>




動画の通り、質問label、回答Frameを自動で生成します。
入力支援フォームから入力したものをそのままアンケートとして使うことができます。


<自動作成フォームの画面>
満足度というSheet名を作成して、質問項目を作成。
f:id:bimori466:20200818051509p:plain

Q1が単一回答(OptionButton)
Q2が複数回答(CheckBox)
Q3が自由形式(TextBox)


<入力支援フォーム画面>
f:id:bimori466:20200817064141p:plain

*追加機能の説明で詳しく解説します。

2【アンケートの質問文字列を「FrameのCaption」ではなく、「LABELのCaption」にする】

<前回のアンケート回答Form画面>
下の画面のように、「Q1~Q3」の「年齢、職業、弊社サービスを~」がFrameのCaptionに書かれています。
f:id:bimori466:20200506075154p:plain

しかし、実際もっと長文の質問もあります。これだと、FrameのCaptionでは文字が切れてしまいます。
そのため、質問内容は、LabelのCaptionに記載するようにしました。


<LabelのCaptionに質問内容を記載するようにした、今回の画面>
f:id:bimori466:20200817071130p:plain

質問内容と回答を分けることで、質問内容が140字まで書き込めます。
Formの幅を変更すれば、表示文字数の変更は対応可能です。

4【回答集計Bookも自動で作成する】

前回までは、「アンケート回答書込みBook」を準備しておく必要がありました。しかし、今回は「アンケート回答書込みBook」が無い場合は、同じフォルダ内に自動で作成して回答を書き込みます。

*追加機能の説明で詳しく解説します。

4 ユーザフォームの処理を解説

アンケート作成から質問回答登録の流れ

1 入力支援フォームでアンケート内容を作成。
2 ユーザーフォームの表示(UserForm_Initialize)
3 「回答開始」をクリック(cmd_strart_Click)、回答を入力する。
4 「次へ→」をクリック(cmd_Next_Click)
5 最後の質問になったら、「回答を送信」をクリック(cmd_回答送信_Click)。
6 回答集計Bookが同一フォルダに有れば、回答集計Sheetにアンケート結果が反映される。
  無ければ、同一フォルダに回答集計Bookを作成して、回答集計Sheetにアンケート結果が反映される。


*全体詳細については、過去記事「ユーザーフォームの処理を解説」を見てください。
bimori466-1.hatenablog.com


5 追加機能の説明

1【入力支援フォーム】の詳細説明

まず、ユーザーフォームでフォームを自動作成するには下の画像のようなSheetを準備する必要があります。

<準備するSheet{Q1~Q6のアンケート}>
f:id:bimori466:20200817090034p:plain

手打ちでもできなくはないのですが、ユーザー側からすると「なんで同じものを書かなきゃならねんだ」と文句がきそうですね。そのため、楽に入力できる「入力支援フォーム」を作りました。

【使い方】処理:「新規作成」「既存追加」の2点です。

■「新規作成」処理の流れ
【例題】:質問項目に「年齢」を作成する場合

1)マクロ「uf_Question_Input_creation」を実行。
2)追加するSheet名を記入(ここでは年齢Sheetとしておきます)
3)質問内容に年齢を記入
4)項目作成をクリック
5)項目数を6にする。入力項目作成をクリック
6)項目内容に、10代~60代を入力
7)質問を登録をクリック
8)次の質問を作成しますかで、「はい」をクリック


では、1)~8)まで詳しく解説します。

【1)マクロ「uf_Question_Input_creation」を実行。】
Alt + F8を押してマクロを呼び出し、uf_Question_Input_creationを選択して実行します。
f:id:bimori466:20200817093446p:plain

マクロを実行すると以下の入力支援フォーム画面が出てきます。

<入力支援フォーム画面>
f:id:bimori466:20200817093800p:plain

今回操作が必要なのは蛍光ペンを引いたところです。


【2)追加するSheet名を記入】
入力支援フォーム画面の「追加Sheet名」の右のテキストボックスに「年齢Sheet」と記入します。

【3)質問内容に年齢を記入】

<ここまでのフォーム画面>
f:id:bimori466:20200817095957p:plain


【4)項目作成をクリック】
f:id:bimori466:20200817101829p:plain

<項目作成フォームが出現する>
f:id:bimori466:20200817105015p:plain

項目数を6にして、入力項目作成をクリックする。
項目作成コントロールが出現するので、10代~60代を記入。

<項目作成コントロール出現画面>
f:id:bimori466:20200817105512p:plain

項目登録をクリックする。すると最初の画面の質問項目のリストボックスに、項目が登録される。

<リストボックスに書きこまれた画面>
f:id:bimori466:20200817110048p:plain


【7)質問を登録をクリック】
エクセルSheetに年齢Sheetが作成され、作成した「年齢」項目が記入される。

<エクセルSheetへの転記画面>
f:id:bimori466:20200817110625p:plain


【8)次の質問を作成しますかで、「はい」をクリック】
質問を登録をクリック後に、次を作成するか確認されます。

<質問作成の確認画面>
f:id:bimori466:20200817111039p:plain


「はい」を選択すると、1)と同じように質問項目を作成できるように初期化される。
f:id:bimori466:20200817111416p:plain

*回答型式について
単一回答であれば、「作成時のフォームオブジェクト」がoptionボタンとなる。
複数回答であれば、「作成時のフォームオブジェクト」がcheckボックスとなる。
自由形式であれば、「作成時のフォームオブジェクト」がtextボックスとなる。

ここを参照して、フォームの自動生成する。
入力を任意にすれば入力チェック処理に引っかからない。


以上の要領でアンケートSheetを新規作成していく。


■「既存追加」処理の流れ
【例題】:質問項目に「年齢」に追加する場合

1)マクロ「uf_Question_Input_creation」を実行。
2)処理の「既存追加」を選択する
3)改修Sheet名に「年齢Sheet」を選択する
4)質問番号に「2」を入力する
5)質問内容に「好きな食べ物」を入力する
6)回答型式の「複数回答」を選択する
7)項目作成をクリック。質問項目数に「3」、項目内容に「りんご」「ぶどう」「その他」を入力する
8)項目登録をクリックする
9)質問を登録をクリックする

では、1)~9)まで詳しく解説します。

【1)マクロ「uf_Question_Input_creation」を実行。】
Alt + F8を押してマクロを呼び出し、uf_Question_Input_creationを選択して実行します。
f:id:bimori466:20200817093446p:plain


入力支援フォーム画面を呼び出す。


【2)処理の「既存追加」を選択する】
【3)改修Sheet名に「年齢Sheet」を選択する】
【4)質問番号に「2」を入力する】
【5)質問内容に「好きな食べ物」を入力する】
【6)回答型式の「複数回答」を選択する】
f:id:bimori466:20200817124006p:plain


【7)項目作成をクリック。質問項目数に「3」、項目内容に「りんご」「ぶどう」「その他」を入力する】
【8)項目登録をクリックする】
f:id:bimori466:20200817124609p:plain


【9)質問を登録をクリックする】
f:id:bimori466:20200817131530p:plain

<Q2が追加された>
f:id:bimori466:20200817131630p:plain


以上の要領でアンケートSheetに追加していく。

【2 アンケートの質問文字列を「FrameのCaption」ではなく、「LABELのCaption」にする】

設計の通りです。もう一度書いておくと、質問の文字数、項目数が増えたとしても、Label、Frameのはばを調整すれば、変更可能です。
現状、質問内容は140字、回答コントロール自由形式以外)は7つまで、が見やすい設計になっています。

【4 回答集計Bookも自動で作成する。】

このアンケートエクセルは、基本アンケート内容ごとにBookをコピーして使うことを想定しています。その部分の作りが甘い気がしますが、今回は質問数が変わっても、回答更新SQLが更新されるようにしました。

設計の内容を詳しく解説します。

下の画像にフォルダの中に、アンケート自動作成エクセルだけがあります。もちろん回答を書き込むエクセルは存在しません。

<アンケート自動作成エクセルの保存先画像>
f:id:bimori466:20200817133446p:plain

アンケート回答後、同一フォルダ内に回答集計Sheetが作成されます。
<回答送信後のメッセージボックスの画像>
f:id:bimori466:20200818055539p:plain

新規回答集計Bookが作成され、回答内容が書き込まれる。
f:id:bimori466:20200818055751p:plain

フォルダを確認すると、回答集計Bookが作成されている。
f:id:bimori466:20200818055908p:plain



以上が、今回追加した機能です。

6 反省点

1 その他のSQL文更新に不具合が2回見つかった(修正済み)。最初の設計の大事さを痛感した。
2 回答1で、「はい」を選んだ方は~、のようなアンケートには対応していない。これに対応しようとすると、最初の設計から見直さなければならないため、今のところ作るきがないです。現状、質問内容に書いて対応するしかない。

7 使ってみたい方はnoteで無料DL

実際に使ってみたい方は、noteより無料ダウンロード可能です。

note.com