アクセス担当のまみです。
DateSerial関数って「年」「月」「日」に対応する数値を返してくれるんですが、存在しない月や日の値でもちょっとした規則によって、日付としての値を返してくれます。
そのことを利用して、翌月末の日付等求めることができます。
支払期限の表示などに使えそうですね。
今回は、DateSerial関数についてお伝えしますね。
Contents
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関数については下記の記事をどうぞ!
クエリを使って翌々月10日を求める
使用するテーブル
「T_納品管理表」
リボンの①「作成」タブから②「クエリデザイン」を選択し、「T_納品管理表」を追加します。
③フィールドに直接入力してもいいですが、右クリックして「ズーム」を選択すると、大きな画面で編集できます。
④「支払期限: DateSerial(Year([発送日]),Month([発送日])+2,10)」と入力して「OK」を左クリックしましょう。
クエリは「Q_支払期限」と名前をつけておきましょう。
フォームを使って翌月末日を求める
テキストボックスの設定
ラベルの標題 | テキストボックスの名前 |
日付の入力 | tx日付 |
翌月末日 | tx翌末 |
ボタンの設定
標題 | 名前 |
計算 | btn計算 |
フォームの作り方の詳細は下記の記事をどうぞ!
①「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関数を上手に使うとカレンダーを数える必要がなくなりそうですね。
ぜひ活用してくださいね!
日付には存在しない数字でも日付におきかえてくれるって感じ?