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

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

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



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

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

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