【VBA】アンケートの送信と集計の自動化【業務を効率化できます】
ฝัง
- เผยแพร่เมื่อ 28 ธ.ค. 2024
- ■目次
00:38 アンケートの送信と集計をしたい
00:44 └やりたい内容
02:05 └アンケートの送信機能
04:36 └アンケートの集計機能
05:01 アンケート送信の機能を作成
17:42 アンケート集計の機能を作成
Excel VBAを使えば、アンケートの送信と、集計作業を自動化することができます。VBAを使って、アンケートの送信や集計作業を自動化すると、業務を効率化することができます。VBAを使ったデータの送信や、集計する方法について、マスターしていきましょう。
■VBAコードを確認する↓
daitaideit.com...
■関連する動画を確認する↓
・条件一致した値を抽出
• 【VBA】条件一致した値を抽出【For+If...
・日付でデータを抽出する
• 【VBA】日付でデータを抽出する【AutoF...
・社員名簿から名前で検索して抽出
• 【VBA】社員名簿から名前で検索して抽出する...
・重複を削除する
• 【VBA】重複したデータを削除【Remove...
・重複しないリストを抽出する
• 【VBA】重複しないリストを抽出【Advan...
・重複するリストを抽出する
• 【VBA】重複するリストを抽出【CountI...
・重複しないリストを作成する
• 【VBA】重複しないリストを作成【Dicti...
・配列をソートする
• 【Excel VBA】配列をソートする【バブ...
・フィルタ結果を配列に格納する
• 【VBA】オートフィルタの可視セルを配列に格...
・フィルタ結果をコピーする
• 【VBA】フィルタの結果をコピーする【オート...
・クロス集計表を作成する
• 【VBA】SUMIFS関数を埋め込んでクロス...
・一致した値を取得する
• 【VBA】一致した値を取得する【VLOOKU...
・複数ブックの一致した値を取得
• 【VBA】複数ブックの一致した値を取得する【...
・連想配列を使って高速で検索
• 【VBA】連想配列を使って高速で値を検索【D...
・連想配列を使って複数条件で検索
• 【VBA】連想配列を使って複数条件で検索【複...
・連想配列で複数項目を取得
• 【VBA】連想配列で複数項目を取得する【配列...
・COUNTIF関数を高速化する
• 【VBA】一致した値のカウントを高速化する【...
・COUNTIFS関数を高速化する
• 【VBA】複数条件に一致した値のカウントを高...
・SUMIF関数を高速化する
• 【VBA】条件一致の加算を高速化【Dicti...
・SUMIFS関数を高速化する
• 【VBA】複数条件に一致した値の加算を高速化...
・数式の取得とコピー、入力をする
• 【VBA】数式の取得とコピー、入力をする【F...
・データベースの操作
• 【VBA】データベースの抽出と書き込み【オー...
・アンケートの送信と集計を自動化 ←こちらの動画
• 【VBA】アンケートの送信と集計の自動化【業...
#ExcelVBA
#アンケート
#送信
#集計
これまで見てきたVBA解説で最高クラスにわかりやすいです。
なるほど!
とても勉強になります。
詳しい解説ありがとうございます。
チャレンジしてみます。
また、このチャンネルで勉強させていただきます。
初歩的な質問で申し訳ありません。1人前の方の言うように、新規ブックは作成できるものの 、それに値が転記されず、元のシートの上部分に転記されてしまいます。
なにか他に必要な処置や条件があるのでしょうか?
コメントありがとうございます!
もしかすると、実行するシートが「アンケートフォーム」のシート以外で実行しているかもしれません。
「アンケートフォーム」のシートをアクティブにした状態で実行するとうまくいくかもしれません。
「アンケートフォーム」のシートにボタンを設置して、そのボタンからマクロを実行すると「アンケートフォーム」のシートをアクティブシートにした状態で実行できますので、思ったとおりのマクロが実行できるかと思います。
参考になればと思います。
また、不明な点等ございましたら、ご連絡いただけたらと思います!
@@IT-gx8sf ご回答ありがとうございます!
試してみます!
@@IT-gx8sf 横から失礼します。アンケートフォームにボタンを設置して実行してみましたが、やはり元のシートに転記されます。
アンケートフォームのシートをアクティブシートにするにはどのようにしたらいいでしょうか?
集計用のマクロが入っているファイルですが、デスクトップ以外に保存すると動作しなくなったりしますか?
コメントありがとうございます!
アクセスすることができるフォルダであれば、そこに保存したファイルのデータを集約することが可能です。
その際には、取得先のファイルパスやフォルダパスを変更する必要があります。
例えば、ネットワークドライブなどに保存した場合だと、そのドライブのパスに変更することで、ファイルを集約することができます。
こんにちは!
いつも楽しく見させて頂いてます。
お陰様で業務が効率化され社員からも好評です!
1つ質問です。
アンケート送信後、一部データ(例社員番号が間違えていた)を回答者が訂正や削除したい場合どのようにコードを書けば効率的でしょうか!?
無知な質問ですみません。
ご教授願います。
コメントありがとうございます!
データを修正や訂正、削除したい場合は、固有のデータとなる「ユーザーネーム」と「日時」を追加して、アンケートを送信できるようにするといいかと思います。
集計する際に、「最新」のアンケートデータを採用することで、修正や訂正、削除の管理をすることができます。
例えば、アンケートを修正したい場合は、アンケートを「再度送信」してもらいます。
すると、アンケートを集計する際に、同じユーザーネームのデータが2つ集計されます。ただ、日時が違いますので、最新のデータを使用することで、アンケートの修正と訂正をすることができます。
最新値の採用の仕方は、「手作業」で確認することとなるんですけど、オートフィルタ機能を使って、昇順に並び替えることで、簡単に確認することができるかと思います。
削除の場合は、空白データを送信してもらうことで、アンケートを削除したものとして扱うことができます。
アンケートデータを送信する方のVBAコードを次のように修正します。
Sub 送信2()
Worksheets.Add
With ActiveSheet.Next
Range("A1") = Environ("USERNAME") '←ユーザーネームを追加
Range("B1") = Format(Now(), "yyyymmdd-hhmmss") '日時を追加
Range("C1") = .Range("B4")
Range("D1") = .Range("D4")
Range("E1") = .Range("F4")
Range("F1") = .Range("F6")
Range("G1") = .Range("F8")
Range("H1") = .Range("A11")
End With
ActiveSheet.Move
Dim A
A = Range("A1") & "-" & Range("B1") & ".xlsx"
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\回答用フォルダ\" & A
ActiveWorkbook.Close False
MsgBox "送信は完了しました。ご回答ありがとうございます。" & vbCrLf & "訂正する場合は再度アンケートを送信ください。"
End Sub
A1とB1のセルに「ユーザーネーム」と「日時」を追加しています。また、送信完了後のメッセージも修正しております。
集計用のVBAコードは同一のものとなります。
アンケートを送信すると次のようにアンケートを集計することができます。
↓集計データ
ユーザーネーム 日時 社員番号 部署 名前 Q1 Q2 Q3
user 20221223-194716 22222 営業部 BBB 5 5 テーブル操作を学んだ。
user 20221223-194758 22222 営業部 BBB 5 5 テーブル操作を学んだ。
user 20221223-194800 22222 営業部 BBB 5 5 テーブル操作を学んだ。
上記の場合は、同じ人が、3回送信したことになります。
そして、上記のうち日時が最新のものを採用することで、アンケートの修正や訂正、削除をすることができます。
参考になればと思います(^^)ご不明点等ございましたら、コメントいただければと思います。
度々、コメント失礼します。
アンケート送信後、入力フォーマットを初期化したいのですが、その場合の方法をご教授願えれば幸いです。
素人ですみません。よろしくお願いします。
コメントありがとうございます!
返信が遅くなり失礼しました。
アンケート送信後に、入力フォーマットを初期化するには、
入力フォームのそれぞれのセルに空欄「""」を入力することで、
初期化することができます。
VBAコードは、次のようになります。
Sub 送信3()
Worksheets.Add
With ActiveSheet.Next
Range("A1") = Environ("USERNAME") '←ユーザーネームを追加
Range("B1") = Format(Now(), "yyyymmdd-hhmmss") '日時を追加
Range("C1") = .Range("B4")
Range("D1") = .Range("D4")
Range("E1") = .Range("F4")
Range("F1") = .Range("F6")
Range("G1") = .Range("F8")
Range("H1") = .Range("A11")
End With
ActiveSheet.Move
Dim A
A = Range("A1") & "-" & Range("B1") & ".xlsx"
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\回答用フォルダ\" & A
ActiveWorkbook.Close False
MsgBox "送信は完了しました。ご回答ありがとうございます。" & vbCrLf & "訂正する場合は再度アンケートを送信ください。"
'送信後、入力フォーマットを初期化
With ThisWorkbook.Sheets("Sheet1")
.Range("B4") = ""
.Range("D4") = ""
.Range("F4") = ""
.Range("F6") = ""
.Range("F8") = ""
.Range("A11") = ""
End With
End Sub
他のブックを操作したあとなので、念のため「ThisWorkbook.Sheets("Sheet1")」というように、
オブジェクトを指定しています。
あとは、それぞれのセルを指定して空欄「""」を入力することで、
フォーマットを初期化することができます。
参考になればと思います。
@@IT-gx8sf
いつも親切&丁寧すぎる返信ありがとうございます。
さっそくチャレンジしたいと思います!
日々勉強になり、とてもありがたいです。
『神』チャンネルです。