シンプルな予約表を作ってみる

記事
ビジネス・マーケティング
Accessなら使いやすいフォームを作成することができます。

Excelではシートごとにデータが増えていくため、切り替えが少し面倒です。

今回は1日単位で予約を管理する仕組みを紹介してみます。
スケジュール管理にも応用できる汎用性のあるシステムですが、慣れれば簡単に作成することができます。

美容院の予約を例にしてみます。

個人の店舗を想定して予約内容は1件ですが列を増やせば複数の予約にも対応可能です。
時間で予約を取る業種であれば色々応用ができると思います。

スクリーンショット 2025-02-01 085604.jpg
上部のカレンダーをボタンで操作することで該当の日がすぐに確認できます。

ここまでならExcelでも何ならWordでもマクロを使って同じようなことは可能だと思います。

さて、Accessではデータベース処理をするため、サービスの内容はマスタ管理します。
スクリーンショット 2025-02-01 090849.jpg

ここでは割愛しますが、顧客もマスタ管理すればどのお客さんがどの程度どんなサービスを利用しているか。

曜日による予約状況の傾向などが蓄積されたデータから分析できるようになってきます。

作業としては日常業務としてカレンダーで予約を取るだけなのですが、ある程度の時間が経過すると今度は分析データとして活用できる情報になってくれるのです。

このあたりがデータベースならではの性能であり、素晴らしい仕組みです。

飲食店なら曜日や時間帯での予約状況が把握できれば、スタッフのシフトも組みやすくなります。

カレンダーの作り方を紹介しておきます。

①フィールドが日付だけのテーブルを作成します。
スクリーンショット 2025-02-01 100458.jpg

②時間、内容、備考などのフィールドを持たせてテーブルを作成します。
 このテーブルを細かくすればより多くの情報を持たせることができます。
スクリーンショット 2025-02-01 100613.jpg

スクリーンショット 2025-02-01 100808.jpg
今回30分刻みでタイムテーブルを作成しましたが、ここは自由に設定できます。

③カレンダーを作成するモジュールを記述します。

Function CreateCalender()

    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim lastDay As Date
    Dim i As Integer

    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("T_予定表")

    If rst.RecordCount = 0 Then
        rst.AddNew
        rst!日付 = Date
        rst.Update
    End If

    rst.MoveLast
    lastDay = rst!日付

    For i = 1 To 3650
        rst.AddNew
            rst!日付 = lastDay + i
        rst.Update
    Next

    Set rst = Nothing
    Set dbs = Nothing

End Function

これはカレンダーを作成するひな形のような決まりきったコードなのでコピペしてもらえば良いです。

For i=1 To 3650 で10年分のカレンダーを作成しておきます。

④テーブルを基にクエリを作成して、テーブル作成クエリでテーブルを作成します。
スクリーンショット 2025-02-01 101214.jpg
リレーションの無い「直積クエリ」です。あまり使うことは無いですが、今回のようにデータを総当たりさせて使用するには欠かせないクエリです。

データは9万件以上にもなりますが、何らストレス無く動作してくれます。

スクリーンショット 2025-02-01 104049.jpg

⑤フォーム上部に非連結のテキストボックス(名前:valDate)を設置して、日付を表示させます。コマンドボタンを設置して日付の移動およびフィルタを実行します。

スクリーンショット 2025-02-01 104142.jpg


Private Sub cmdMoveNext_Click()
    Call moveDate(1)
End Sub

Private Sub cmdMoveNext2_Click()
    Call moveDate(10)
End Sub

Private Sub cmdMovePrevious_Click()
    Call moveDate(-1)
End Sub

Private Sub cmdMovePrevious2_Click()
    Call moveDate(-10)
End Sub

Private Sub moveDate(dVal As Date)
    valDate = DateAdd("d", dVal, valDate)
    Me.Filter = "日付 = #" & valDate & "#"
    Me.FilterOn = True
End Sub

Private Sub Form_Load()
    DoCmd.RunCommand acCmdAppMaximize
    Call moveDate(0)
End Sub

各ボタンのコードです。

大まかには以上の手順だけなので、少しAccessの知識があればシステム自体は作れると思います。
あとはアイデア次第で色々な運用をすれば良いと思います。

ちなみに、私の仕事場では「公用車の予約」「面談室の予約」「面会者の予約」などで役立っています。

社内LANで共有できるのもAccessの強みです。(Excelは誰かが使用中には他の人が操作できません)


最後までお読みいただきありがとうございました。

毎日の業務で入力して使用済みになったデータも、実はさまざまな分析をするための重要な情報になる。それを実現するのがデータベースシステムです。






サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら