ACCESSで日付操作をする際に、よく利用するのが前月初日の日付を求める計算です。
月初の日付を入力したり、その日付で処理をする際に利用されます。
今回は、VBAで前月初日の日付を求める方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
前月初日の日付を返すファンクションプロシージャ
引数に指定した日付の前月初日の日付を返すFunctionプロシージャをVBAで作成しました。
以下がその内容です。
Public Function zengetsu_syo(kijun_bi As Date) As Date
'■■■指定した日付の前月初の日付を返す■■■
zengetsu_syo = DateValue(Year(DateAdd("m", -1, kijun_bi)) & "/" & Month(DateAdd("m", -1, kijun_bi)) & "/01")
End Function
例えば、
zengetsu_syo(#2026/01/11#)
と入力して実行すると、2025/12/1が返されます。
プロシージャの内容解説
それでは、内容を解説します。
このプロシージャでは以下の手順で前月初日を計算しています。
まず、kijun_biという元となる日付を引数として入力します。
年の計算
年は以下で計算します。
Year(DateAdd("m", -1, kijun_bi)
DateAdd関数を使って”m”、つまり月を1ヵ月減らした日付を出し、年をYear関数で抽出します。
月を1ヵ月減らすことで年が変わる場合(例えば基準日が1月の場合)にも対応できます。
月の計算
月は以下で計算します。
Month(DateAdd("m", -1, kijun_bi)
DateAdd関数を使って”m”、つまり月を1ヵ月減らした日付を出し、月をMonth関数で抽出します。
基準日が1月の場合に年をまたいで月が12に戻るケースにも対応できます。
日の計算
日は以下で固定しています。
"/01"
月初の日付は必ず1日なので、ここは固定で記載しています。
日付データの作成
上記で年、月、日のデータを個別に作成した上で、DateValueでこれらを合成して日付データを作成します。
年、月、日の間を/(スラッシュ)で区切っていくことでDateValue関数で日付型データに変換できます。
DateValue関数を使わないと日付型ではなく文字列型になってしまうので注意してください。
フォームでの利用例
では、今回作成したプロシージャをフォームで利用してみましょう。
以下のフォームを作成しました。

フォーム上に基準日テキストボックスを作成し、更に基準日を参照する前月初テキストボックスを作成しています。
前月初テキストボックスのコントロールソースは以下の通りです。
=zengetsu_syo([基準日])
作成したFunctionプロシージャ「zengetsu_syo」を利用し、引数にフォーム上の基準日を指定しています。
フォームビューで結果を見てみましょう。

基準日に対して前月初日の日付が正しく表示されています。
その他の日付の算出
今回は前月初日でしたが、前月末日や翌月初日、翌月末日を求めたい場合は以下の記事もご参照ください。



以上、VBAで前月初日の日付を求める方法をご紹介しました。
この記事の内容を実際に試したい方へ
本記事の内容を実際にACCESSを動かしながら確認したいという方向けに、記事で紹介した機能が実装されたサンプルファイルを販売しています。記事内で解説しているテーブル、クエリ、フォーム、レポート、VBAのプロシージャなどをそのまま動く形で実装しました。
学習用としてはもちろん、加工して自社業務に利用することも可能です。
ご興味のある方は以下からご覧ください。

ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に300以上のACCESSデータベースの開発・修正実績のあるはこにわガジェット(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

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