【開発事例】Excel VBA × QRコードによるイベント出席管理システム
- yuji fukami
- 2024年8月15日
- 読了時間: 4分
更新日:1月7日
※掲載している内容・資料は、実際の案件に基づきつつ、個人・企業が特定できないよう内容を一部加工・再構成したものです。守秘義務に配慮し、実際の顧客情報等は一切含まれておりません。

はじめに|Excel VBA × QRコードによるイベント出席管理
イベント運営において、「誰が・いつ来場したのか」 を正確に把握することは非常に重要です。
特に
100名以上が参加するイベント
入退場の時間管理が必要
複数受付で同時処理したい
といったケースでは、手書き名簿や単純なExcel入力では限界 があります。
本記事では、Excel VBA と QRコードを活用して構築した「イベント出席管理システム」 の開発事例をご紹介します。
このシステムで解決した課題
従来の課題
手入力による 入力ミス・記録漏れ
受付が複数あると データが分散
後から集計するのに 時間がかかる
誰がどの受付PCで入力したか分からない
求められていた要件
QRコードで 即時・正確に出席登録
複数台PCで 同時運用
データを リアルタイムで統合
システム全体構成
・QRコードをスキャンには市販のスキャナーを使用
・QRコードをスキャンするPCは複数台用意して、スキャンデータを別々のExcelブック(出席管理用.xlsm)にまとめる。
・出席管理用.xlsmから出席データをxlsxデータ「出席データ.xlsx」として出力して、OneDriveでリアルタイムで共有し、別端末のPCから統合用のエクセル「出席データ統合用.xlsm」にて全出席者のデータとして各xlsxデータを統合する。
・統合データはxlsxデータ「統合データ.xlsx」として定期的に出力する

【基本技術】
本案件で必要な技術要素をまとめる
・QRコードスキャナーのスキャンデータのExcel側での取得
・OneDriveでのファイル共有
・外部ファイル(xlsx)の操作、データ取得
・Application.Ontimeを利用して指定時刻にマクロ実行
【レイアウト 出席管理用.xlsm】
出席管理用.xlsmのレイアウトは次の通り
「設定」シート
・集計対象列で「来場1」「来場2」「来場3」かを選択
・来場2の場合は時間帯によって3つ別々の列に出席登録されるので、その開始時刻、終了時刻を設定する
・「出席データ.xlsx」を1時間おきに自動出力するが、それを毎時○分かを設定する。
・出力する「出席データ ○○.xlsx」の名前の「○○」にPC名を入れるので、その入力部分
・出席者ごとにメールの通知機能の設定

「集計」シート
・「スキャナーフォーム起動」でQRコードを常時スキャンして処理を実行するためのユーザーフォームを起動する
・「来場1」「来場3」の場合はD,L列にスキャンした出席者番号の行に現在時刻が自動的に入力される
・「来場2」の場合は、「設定」シートで設定した時刻範囲に応じて、G,I,K列にスキャンした出席者番号の行に現在時刻が自動的に入力される

スキャナーフォームは次のような感じ
ユーザーフォームのテキストボックスに入力することで、常時手前に表示することで処理を安定化ができる。
ちなみに「スキャンデータをセルに直接入力する」ようにするとイベント処理や、入力位置が不安定になったりする問題が発生するので不採用

参考に来場1に出席データが入力されるとこんな感じ

来場2の場合

「集計初期化」ボタンを押すと、必ずYes/No確認画面が表示される
誤って押して消してしまうことがないようにするための仕様

【レイアウト 出席データ統合用.xlsm】
「設定」シート
・処理対象の「集計データ(出席データ)」の保存先のフォルダパスを指定
・出力する「統合データ.xlsx」の保存先フォルダならびに移動先フォルダを指定する
(OneDrive上に直接保存する処理ができないことがあるので、デスクトップ上に保存→移動で処理を実現している)
・データ統合処理を毎時○分で実行するかを設定して、「保存予約実行」で予約する
・「統合処理と保存(手動)」は一回の統合処理を手動で行う

【実行確認】
まずファイルの構成は次のような感じ
・「集計データ」フォルダの中に各「出席管理用.xlsm」から出席データが出力される
・「統合データ」フォルダの中に各実行時刻ごとに「出席データ統合用.xlsm」から出力された「統合データ.xlsx」が溜まっていく

「出席データ.xlsx」から「統合データ.xlsx」が生成されると次のようになる。



