【Access】 DateSerial関数で月初や月末の日付を求める

アクセス担当のまみです。

 

DateSerial関数って「年」「月」「日」に対応する数値を返してくれるんですが、存在しない月や日の値でもちょっとした規則によって、日付としての値を返してくれます。

そのことを利用して、翌月末の日付等求めることができます。

支払期限の表示などに使えそうですね。

 

今回は、DateSerial関数についてお伝えしますね。

 

Contents

DateSerial関数

 

構文
DateSerial (年, 月, 日)

数値を日付の形にした値を返してくれます。

 

NO 使用例 結果
DateSerial(2018,11,18) 2018/11/18
DateSerial(2018,11,31) 2018/12/01
DateSerial(2018,11,0) 2018/10/31
DateSerial(2018,11,-5) 2018/10/26
DateSerial(2018,13,3) 2019/01/03

 

① 日付として存在する数値だし、イメージ通りの結果です。

② 11月は30日までで31だとその翌日の意味にとらえてくれるので、「2018/12/01」を返してくれます。

③ 0って数字は1の1つ前なので「2018/11/01」の前日の「2018/10/31」を返してくれます。

④ ③と同じ考えで、日付に-5を入れると、「2018/11/01」の6日前の「2018/10/26」を返してくれます。

⑤ 月は12月までなので13だと翌年の1月の意味にとらえてくれるので、「2019/01/03」を返してくれます。

 

(はてな君)
なんとなく法則がわかったよ。
日付には存在しない数字でも日付におきかえてくれるって感じ?

 

(あいちゃん)
そうだね。そんな感じかな。
その特性を活かして今月の末日の日付とか翌月の初日の日付とか求められるんだよ!

 

(はてな君)
へ~そうなんだ。

 

[quads id=2]

 

翌月の末日や前月の初日を求める

 

今日を基準として翌月の末日や前月の初日を求める式をまとめたものが下記の表です。

求める日 使用する式
今月の初日 DateSerial(Year(Date),Month(Date),1)
今月の末日 DateSerial(Year(Date),Month(Date)+1,0)
翌月の初日 DateSerial(Year(Date),Month(Date)+1,1)
翌月の末日 DateSerial(Year(Date),Month(Date)+2,0)
前月の初日 DateSerial(Year(Date),Month(Date)-1,1)
前月の末日 DateSerial(Year(Date),Month(Date),0)

※Year関数は年をMonth関数は月を取り出してくれます。

Date関数については下記の記事をどうぞ!

 

【Access】Date関数と書式の設定で日付の表示は自由自在

2018年11月29日

 

(あいちゃん)
「Date」が今日の日付を表しているのでこの部分を変更することで任意の日付を基準として翌月の末日等求めることができるよ。

 

(はてな君)
へ~基準となる日から翌月末日とか求められるんだね。

 

(あいちゃん)
全部やるのは大変だからクエリとフォームで1つずつやってみようか。

 

(はてな君)
うん!そうそう翌々月10日とかもできるよね?

 

(あいちゃん)
上の表はちょっと難しい初日と末日しかまとめてないけど、翌々月10日でも翌月25日でももちろんできるよ!

 

クエリを使って翌々月10日を求める

 

使用するテーブル

「T_納品管理表」

 

(はてな君)
翌々月10日を支払期限にしたいんだ。

 

(あいちゃん)
じゃあさっそくクエリを使って翌々月10日を求めてみよう!

 

リボンの①「作成」タブから②「クエリデザイン」を選択し、「T_納品管理表」を追加します。

 

③フィールドに直接入力してもいいですが、右クリックして「ズーム」を選択すると、大きな画面で編集できます。

 

④「支払期限: DateSerial(Year([発送日]),Month([発送日])+2,10)」と入力して「OK」を左クリックしましょう。

 

(はてな君)
データシートビューで確認してみてね!

 

 

クエリは「Q_支払期限」と名前をつけておきましょう。

 

フォームを使って翌月末日を求める

 

(あいちゃん)
フォームを使って何を求めようか?

 

(はてな君)
えっとね。入力した日付の翌月末日!

 

(あいちゃん)
じゃあ入力するテキストボックスと出力するテキストボックスを用意しよう!

 

 

テキストボックスの設定

ラベルの標題 テキストボックスの名前
日付の入力 tx日付
翌月末日 tx翌末

 

 

ボタンの設定

標題 名前
計算 btn計算

 

フォームの作り方の詳細は下記の記事をどうぞ!

 

アクセスVBAでフォームにボタンを配置しよう

2018年9月18日

 

①「btnチェック」を選択した状態で、プロパティシートの②「イベント」タブを選択して「クリック時」に「イベントプロシージャ」を選びコードの画面を表示します。

 

「Private Sub btn計算_Click()」と「End Sub」の間に下記のコードを記載しましょう。

    Dim stDate As String
    
    stDate = Me.tx日付.Value
    
    Me.tx翌末.Value = DateSerial(Year(stDate), Month(stDate) + 2, 0)

 

 

コードをコピーされたい場合は下記の記事を参考にしてください。

 

関連記事
 
 

 

(あいちゃん)
フォームビューで確認してみてね!

 

 

 

(はてな君)
簡単に翌月末日がわかるようになったよ!

 

 

フォームは「F_翌月末日」と名前をつけておきましょう。

 

まとめ

 

DateSerial関数を上手に使うとカレンダーを数える必要がなくなりそうですね。

 

ぜひ活用してくださいね!

 

スポンサーリンク