日付関係のユーザー定義関数
文書番号: ac2002011
動作確認: Access 95/97/2002
◆概要
この資料は、Microsoft Accessで使える日付関係のユーザー定義関数を記載しています。
◆内容
アプリケーションを開発する中で、指定した日付からある特定の関係にある日付を表示したいことがあります。そういうときに使える日付関係のユーザー定義関数をご紹介します。
1.翌月の1日の日付を求める関数
2.月末の日付を求める関数
3.翌年の前月末日を返す関数(閏年対応)
4.指定された日付より前の、一番近い月曜日の日付を返す関数
5.指定された日付から現在の日付までの年数を返す関数
6.指定された日付から現在の日付までの年に満たない月数のみを返す関数
7.使用例
◆1.翌月の1日の日付を求める関数
次の関数は、引数として渡された日付の翌月の 1 日の日付を返します。
標準モジュールに以下のコードを貼り付けます。
Function FirstOfNextMonth(datAny As Date) As Date FirstOfNextMonth = DateSerial(Year(datAny), Month(datAny) + 1, 1) End Function
▼ページトップに戻る
◆2.月末の日付を求める関数
次の関数は、引数dteInputで指定された日の属する月末日を返します。
標準モジュールに以下のコードを貼り付けます。
Function DaysInMonth(dteInput As Date) As Date Dim intDays As Integer ' 1 か月を加え、日付を引いて、その差を求めます。 intDays = DateSerial(Year(dteInput), Month(dteInput) + 1, _ Day(dteInput) + 1) _ - DateSerial(Year(dteInput), Month(dteInput), Day(dteInput)) DaysInMonth = DateSerial(Year(dteInput), Month(dteInput), Day(intDays)) End Function
▼ページトップに戻る
◆3.翌年の前月末日を返す関数(閏年対応)
次の関数は、引数dteInputで指定された日の属する月の翌年の前月末日を返します。
標準モジュールに以下のコードを貼り付けます。
Function EndofNextYear(dteInput As Date) As Date Dim intDays As Integer ' 1 か月を引き、日付を引いて、その差を求めます。 intDays = DateSerial(Year(dteInput) + 1, Month(dteInput), _ Day(dteInput) + 1) _ - DateSerial(Year(dteInput) + 1, Month(dteInput) - 1, Day(dteInput)) EndofNextYear = DateSerial(Year(dteInput) + 1, Month(dteInput) - 1, _ Day(intDays)) End Function
▼ページトップに戻る
◆4.指定された日付より前の、一番近い月曜日の日付を返す関数
次のサンプルは、指定された日付より前の、一番近い月曜日の日付を返す関数です。以下の条件に従って月曜日の日付を判断します。 現在の日付が火曜日から日曜日の場合は、前の月曜日の日付を返します。
現在の日付が月曜日の場合は、現在の日付を返します。
日付が NULL または無効な日付の場合は、NULL を返します。
標準モジュールに以下のコードを貼り付けます。
Function GetMonDate(CurrentDate As Date) As Date If VarType(CurrentDate) <> 7 Then GetMonDate = Null Else Select Case Weekday(CurrentDate) Case 1 ' Sunday GetMonDate = CurrentDate - 6 Case 2 ' Monday GetMonDate = CurrentDate Case 3 To 7 ' Tuesday..Saturday GetMonDate = CurrentDate - Weekday(CurrentDate) + 2 End Select End If End Function
▼ページトップに戻る
◆5.指定された日付から現在の日付までの年数を返す関数
標準モジュールに以下のコードを貼り付けます。
Function Age(varBirthDate As Variant) As Integer Dim varAge As Variant If IsNull(varBirthDate) Then Age = 0: Exit Function varAge = DateDiff("yyyy", varBirthDate, Now) If Date < DateSerial(Year(Now), Month(varBirthDate), _ Day(varBirthDate)) Then varAge = varAge - 1 End If Age = CInt(varAge) End Function
▼ページトップに戻る
◆6.指定された日付から現在の日付までの年に満たない月数のみを返す関数
標準モジュールに以下のコードを貼り付けます。
Function AgeMonths(ByVal StartDate As String) As Integer Dim tAge As Double tAge = (DateDiff("m", StartDate, Now)) If (DatePart("d", StartDate) > DatePart("d", Now)) Then tAge = tAge - 1 End If If tAge < 0 Then tAge = tAge + 1 End If AgeMonths = CInt(tAge Mod 12) End Function
▼ページトップに戻る
◆7.使用例
今まで紹介した、上記の日付関係のユーザー定義関数を利用した例です。
上記の全てのコードが標準モジュールにあるものとします。
フォームにテキストボックスを7つ配置します。最初のテキストボックスの名前をtxtTodayに、コントロールソースを「=Today()」とします。下から3つめのテキストボックスの名前を「基準日」とします。下図を参考にそのほかのテキストボックスのコントロールソースを設定します。
Private Sub Form_Load() 基準日.SetFocus 基準日.Text = "2000/4/1" End Sub
◆実行結果
▼ページトップに戻る