Accessで工数管理を作ってみる教材
ウェブ全盛時代になり、またスマートデバイス全盛になり、PCの出番は少なくなりつつある中でも、未だ生き残ってるMicrosoft Access。業務用アプリをローコードで作成する手段としてそれだけまだまだ需要があるという事の裏返しかもしれません。
さて、そんなAccessで1〜10までを学ぶような教材をという事で、一通りアプリを作る上でのイロハを加えたものをリリースすることにしました。カスタマイズして使えるようになっています。
目次
今回使用するファイル等
- 工数管理 - 管理者側プログラム
- 工数管理 - ユーザ側プログラム
- プロジェクトコード一覧 - Excelファイル
- 勤怠管理データ突合用ファイル - Excelファイル
データは空の状態であるため、データの整備が必要です。また、本プログラムはMicrosoft Access 2016 (64bit)で作られていますが、参照設定としてMicrosoft Outlook 2016 Object Libraryが入ってる為、別途Outlookがインストールされている必要があります。
セットアップ
データの準備
プロジェクトコード一覧
ユーザが工数登録をする際に利用するプロジェクトのコードの一覧となります。起動時に自動的にリンクテーブルとして接続されるようになっているため、ファイルサーバなどにこのファイルを配置し、追加などがある場合には直接このファイルに記述を追加すれば、ユーザ側での選択肢に出てくるようになります。
記述する内容は以下の通りです
- IDは連番です1〜はじめて重複しない数値を記述します
- pjcodeは文字列です。こちらも重複しない文字列(文字と数値)でコード番号を記述します。
- pjtitleはプロジェクト名を入れます。
- busyoは現在利用していない項目ですが、部署コード(数値)を入れるために利用します(部署ごとにコードを分けるために利用)
- bunruiは現在利用していない項目ですが、直接・間接のどちらかを入れて、工数管理の補助に利用します。
図:ユーザ側でコード選択用のリストになります
勤怠管理データ突合用
このファイルは、提出された工数データと勤怠システム側から取り出したデータとを突合(工数時間に差異が無いか?未登録のデータはないか?)する為のテンプレートです。
社員番号および日付にて特定し、両者の工数時間と労働時間との差をチェックします。テンプレート側に記載する内容は以下の通りです。
- 社員コード - 数値型。社員番号を記入します。
- 社員名 - 文字列型。社員の名称を記載します。
- 部署 - 部署名を記載します。
- 役職 - 役職名を記載します。
- 日付 - 西暦での労働日。基本的には30,31日までのすべての日付を記載します。(休日であっても必要です)
- 日タイプ - 0=平日、1=所定休日(土曜日)、2=法定休日(日曜日や祝日)。休日の判定に利用しています。
- イベント - 主に祝日名。休日判定に利用しています。
- 実労働時間 - 実際に労働に費やした時間(単位は分)。0の場合は休日。
- 所定労働時間 - その企業に於ける1日の必要な労働時間(単位は分)
- 休暇1:休暇名 - 平日に於いて休暇を取っている場合の判定(restlist参照)
緑色でマークした項目は必須入力項目になります。
図:突合の為のテンプレートです
マスタデータの整備
この項目は主に管理者側で提出された工数を元に分析や突合のために用いられるマスターデータです。admin.accdb内にあるテーブルに格納しますが、リボンより「マスタデータ編集」からUI上で管理する事が可能です。
図:UI上から登録・編集・削除が可能です。
useridテーブル
工数管理対象の社員に関する情報を格納するテーブルです。社員番号を元に他のテーブルで間接的に利用します。主に
- 社員番号
- 社員名
- メアド
- 階級 - 数値型でrankテーブルにある数値を指定する(ドロップダウンで選択可能)
- 社員区分 - 数値型でemptypeテーブルにある数値を指定する(ドロップダウンで選択可能)
を登録します。ユーザ一覧タブから登録します。
rankテーブル
社員の階級に関する情報を格納するテーブルです。階級に応じて1時間当たりの工数単価を登録します。主に工賃の解析に利用します。
- 階級 - 数値型。重複登録は出来ません
- 階級名 - その階級の職制名称。
- 単価 - 数値型。1時間(60分)当たりの労働単価を入力します。
職制階級タブから登録します。
restlistテーブル
休日判定の為のテーブルです。
主に勤怠データとの突合の為に利用します。平日に於いて労働時間が0且つ、restlistテーブルにある休暇名が合った場合、休日フラグを割り当てる判定に利用し、休日フラグがTrueの場合は時間の突合をしません。有給休暇(午前・午後)のような半休制度適用の場合は、休日フラグはオフになるように予めデータセットを入れてあります。
- ID - オートナンバー型。連番で利用するためのものです。
- 休暇名 - 勤怠データ側の休暇1:休暇名との判定に利用します。
- 休日フラグ - Trueの場合、その日は休暇とみなし、工数時間との突合作業対象外になります。
emptypeテーブル
マスターデータ編集上での社員区分の為のテーブルです。予めいくつかのデータセットが入っています。
このテーブルだけはマスターデータ編集のUIには編集項目を用意していません。直接テーブルから登録や編集が必要です(頻繁に登録や変更をする項目ではない為)。
主に、勤怠データとの突合で利用され、本プログラムでは、ID:2の派遣社員についてだけは突合対象から外す為に利用しています。
- ID - 社員区分の基礎となる数値型のIDです。
- emptype_name - 社員区分の名称を入力します。
利用手順
この項目ではユーザ側での工数登録・提出〜管理者側での取り込み・突合作業・分析までの一連の作業の流れと各機能についての説明になります。ここでは、client.accdbアプリについての説明になります。
ユーザ側プログラム
セッティング
初回起動時に登録が必要です。VBAコードが入ってる為、コードの有効化を求められる場合があります(これらはマクロの設定から変更可能。また、信頼できる場所として追加する事で出てこなくなります)。
- PJコードリスト - 前項で準備しておいたPJコードリストのExcelファイルへのパスを指定します。
- 保存先 - 工数データを保存する先のフォルダへのパスを指定します。
- 社員番号 - 自身の社員番号を入力します。
- 社員名 - 自身の社員名を入力します。
PJコードリストや保存先は、全員共通の場所を予め管理者側で決めておき、そちらを指定するように通知しましょう。保存をクリックすると、自動的にPJコードリストとリンクテーブル(xlsxtable)が貼られ、次回以降は起動時に貼られます。
図:この作業は必須項目です
工数登録
ユーザが日々工数を登録する画面です。登録作業はシンプルで簡単です。手順は以下の通り
- 右上の新規レコード追加ボタンをクリック
- 日付欄から登録する日付をカレンダーから選びます
- 一覧からPJコードをドロップダウンから選びます。自動的にPJタイトルは入ります。
- 工数はhh:mmの形式で時間を入力します。
- 登録内容はあとからでも直接対象の日付を左サイドの日付パネルから選んで直接訂正が可能です。
同一日付での登録は出来ません。また、1日内に於けるプロジェクトコードは複数登録は可能です。
図:コードを選び工数を入れていくだけのスタイル
工数提出
登録した工数は指定された保存場所へと提出が必要になります。毎月月末に未登録の工数をすべて登録し、提出作業を以下の手順で行います。
- リボンのメニューから勤怠出力をクリック
- 年を西暦で指定
- 月を指定
- 出力をクリックする
指定のフォルダに以下の図の例で言えば、202105のフォルダが作成されて、そこへ社員番号でのxlsxファイルが生成され、工数がエクスポートされます。管理者はこの年月のフォルダを指定する事でインポートすることになります。
図:年と月を指定して出力するだけ
図:エクスポートされたデータの中身
管理者側プログラム
管理者側はユーザ側と異なり多数の機能が存在します。セッティング項目についてはユーザ側と同様であるので、ここでは記載を省略します。また、マスターデータ編集についても前述している為ここでは準備済みとして進めます。ここでは、admin.accdbについてその使い方と流れを説明します。
データ取り込み
ユーザが提出した工数データをフォルダ単位でインポートします。同一年月のデータは一旦デリートしてから再取り込みを行うので洗い替えでデータはインポートされます。以下の手順で取り込みます。
- リボンよりデータ取り込みをクリック
- インポートしたいデータの入ってるフォルダを指定します(例:202105)
- フォルダ内のxlsxファイルが連続してインポートされます。
- リボンよりメイン表示をクリックする事でインポートされたデータを閲覧可能です。
予めuseridテーブルに登録のない社員番号のデータはインポートされませんので注意が必要です。
また4.で表示される工数一覧は親テーブルが年月、そこにインポートテーブルがぶら下がる形で連結されています。取り込んだデータを更に分解して、分析用にデータをバックグラウンドで使えるように整備しています。
図:インポートされたデータの一覧
TSログ取り込み
勤怠管理データと突合チェックする為のデータのインポートを行う機能です。予め用意しておいた前述の勤怠管理データ(指定月のもの)をインポートし、インポート済みの工数データとの差異や有無を確認します。以下の手順でインポートを行います。
- リボンより「TSログ取り込み」をクリックする
- 用意しておいた勤怠データのxlsxファイルを指定する
- tsdataテーブルへデータは洗い替えでインポートされます(日付はファイルから自動判定します)
- リボンより「TS突合結果表示」をクリックする
- NG判定として、突合結果で時間差異があるもの、工数未登録のもの、勤怠側未登録のものなどが判定結果として表示されます。
- 通知の送信ボタンをクリックする事で、これらのデータについて一括で対象者にまとめてメールで修正・登録を促す事が可能です(Outlookが必要です)
図:突合結果NGのものが表示される
推移分析
ユーザからの工数データを取り込むと各種分析が可能になります。稼働時間集計、個人毎集計、工数TOP10、工賃TOP10を現在サポートしています。以下の手順でそれぞれ検索をかけるとチャート表示されるようになります。
- リボンより「推移分析」をクリックする
- 4つのタブがあるので、分析したい内容のタブを開く
- 開始日付および終了日付をカレンダーから選択する
- 個人毎集計のみドロップダウンより社員名を選択します。
- 検索をクリックするとデータが絞り込まれて集計されてチャートに反映します。
図:PJコード別や社員別でグループ化されて集計されます
データ集計
ユーザからの工数データを取り込んだ後にこれらのデータからPJコード別、個人別に工数時間および工賃について集計したデータを表示・Excel形式でエクスポートする事が可能になっています。以下の手順で検索を掛けてから出力を行います。
- リボンより「データ集計」をクリックする
- 2つのタブがあるので、集計したい内容のタブを開く
- 開始日付および終了日付をカレンダーから選択する
- 検索をクリックするとデータが絞り込まれて集計されてデータリストが表示されます。
- 出力をクリックすると、保存場所を指定して、Excel形式で現在のデータリストをエクスポートします。
図:簡単に全データから絞り込みと集計が可能
リボンのコード
本プログラムの独自リボンは、システムオブジェクトである「USysRibbons」テーブルに登録されています。表示のさせかたはこちらのサイトを参考にシステムオブジェクトを表示すると閲覧が可能ですが、通常は弄らないでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="ribbonman"> <commands> <command idMso="PartTemplateGallery" enabled="false" /> </commands> <ribbon startFromScratch="false"> <tabs> <tab id="CustomTab" label="コマンド"> <group id="control1" label="メイン画面"> <button id="Button1" imageMso="ShowTimeZones" size="large" label="メイン表示
" screentip="工数登録画面の表示" onAction="メイン表示" /> <button id="Button2" imageMso="MeetingsWorkspace" size="large" label="セッティング
" screentip="設定画面の表示" onAction="セッティング" /> <button id="Button3" imageMso="BlogPublish" size="large" label="勤怠出力
" screentip="データを出力" onAction="出力表示" /> </group> </tab> </tabs> </ribbon> </customUI> |
- 各リボンのコマンドであるonActionはすべてマクロを指定しています。
- また、起動時にはAutoexecマクロが自動的に作動し、startupexec()が実行される仕組みになっています。
- リボン制御用のモジュールはすべてribboncmdに格納されています。リボンロード時にribbonmanコマンドが実行されます。
- リボンを使う為に参照設定にて「Microsoft Office 16.0 Object Library」を加えています。