今回は実際に対応した開発事例案件の1つとして「イベント出席管理システム」の紹介
【背景】
出席者数が100人超規模のイベントなどで出席者の出席管理をQRコードを利用して管理したい。出席データはリアルタイムで管理画面に反映されて、どの時間に何人入場しているかなどを把握して今後に生かしたい。
【仕様】
・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」が生成されると次のようになる。
Comments