こんにちは、なかぜんです。
「出勤や退勤を紙で管理しているけど、月末の集計が大変…」
「タイムカード代わりになるツールを無料で作れたらいいのに…」
そんな悩み、ありませんか?
実は、Microsoft Accessを使えば、出退勤の記録から集計までカバーできるアプリを、自分で簡単に作ることができます!
今回は、Access初心者でも取り組めるように、テーブル設計・フォーム作成・VBAコード・集計クエリまで、1つずつ丁寧にご紹介していきます。
📌まずは基本設計を考えよう
● 必要な機能は?
最低限、次のような機能があると便利です:
- 社員名の選択
- 出勤ボタンで「現在時刻」を記録
- 退勤ボタンで「退勤時刻」を記録
- 日付ごとの記録表示
- 月単位の集計
● テーブル設計例(T_出退勤)
フィールド名 | データ型 | 説明 |
---|---|---|
ID | オートナンバー | 主キー |
社員名 | 短いテキスト | 出退勤する人の名前 |
日付 | 日付/時刻 | 勤務日 |
出勤時刻 | 日付/時刻 | ボタンで入力 |
退勤時刻 | 日付/時刻 | ボタンで入力 |
🖥フォームとVBAで出退勤を記録
● フォーム設計(F_出退勤)
フォームに配置する主なコントロールは以下のとおりです:
- 社員名:コンボボックス(事前に社員リストがあると◎)
- 日付:テキストボックス(既定値=Date)
- 出勤ボタン:btn出勤
- 退勤ボタン:btn退勤
● 出勤ボタンのVBAコード
Private Sub btn出勤_Click()
If IsNull(Me.社員名) Then
MsgBox "社員名を選択してください", vbExclamation
Exit Sub
End If
Me.出勤時刻 = Now()
Me.日付 = Date
DoCmd.RunCommand acCmdSaveRecord
MsgBox "出勤時刻を記録しました", vbInformation
End Sub
● 退勤ボタンのVBAコード
Private Sub btn退勤_Click()
If IsNull(Me.社員名) Then
MsgBox "社員名を選択してください", vbExclamation
Exit Sub
End If
Me.退勤時刻 = Now()
DoCmd.RunCommand acCmdSaveRecord
MsgBox "退勤時刻を記録しました", vbInformation
End Sub
「Now()」で現在の時刻が取得されます。入力ミス防止のため、社員名が未入力のときはメッセージで注意するようにしています。
🔍よくあるミスと注意点
- 【注意】同じ日付に複数レコードができる → 重複チェックを導入すると安心
- 【注意】日付をまたぐ勤務 → 勤務日が日付フィールドに正しく記録されるよう注意
- 【注意】社員名の手入力 → コンボボックスで選択式にすることで入力ミスを防げます
📊応用:月ごとの集計クエリ
出退勤データから、月別の勤務状況を集計したいときは、次のようなクエリが便利です:
SELECT
社員名,
Format([日付], "yyyy/mm") AS 月,
Count(*) AS 出勤日数,
Avg(DateDiff("n", [出勤時刻], [退勤時刻])) AS 平均勤務時間_分
FROM
T_出退勤
WHERE
退勤時刻 Is Not Null
GROUP BY
社員名, Format([日付], "yyyy/mm");
これを元にレポートを作成すれば、月報や給与計算の元データとしても活用できます。
🎯まとめ|小さく始めて業務改善!
Accessで作る出退勤管理アプリは、個人でも小規模チームでもすぐに導入できる優れモノ。
- ボタン1つで打刻記録
- 日付や社員ごとの集計も簡単
- 無料&カスタマイズ自由
今回ご紹介した内容は、あくまで「最小構成」。もっと本格的にするなら:
- 社員マスタと連携
- 勤務時間の自動計算
- レポート印刷対応
…など、いろんな拡張が可能です。
Accessは慣れるとどんどん楽しくなります。
「これなら自分でもできそう!」と思った方、ぜひ最初の一歩を踏み出してみてくださいね。
