大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、日付の取得や、比較、判定、加算、フォートマットを設定する方法をご紹介します。日付を操作するVBAコードは複数あります。日付の操作はちょっとややこしいんですけど、用途ごとに使うVBAコードを把握して、日付の操作についてマスターしていきましょう。

はじめに

この記事では、日付の取得や、比較、判定、加算、フォートマットの設定について、ご紹介します。

日付の操作で使うVBAコードは、次のように複数あります。

  • Year
  • Month
  • Day
  • Format
  • Weekday
  • DateDiff
  • DateSerial
  • Date
  • CDate
  • IsDate
  • DateAdd
  • .NumberFormatLocal

日付の操作で、用途ごとに使うVBAコードを把握して、日付の操作についてマスターしていきましょう。

では、日付の操作について、解説していきます。

この記事を読むメリット

  • 日付の取得や、比較、判定、加算、フォーマットなどの日付の操作をマスターできます。

本記事の内容を動画でまとめています

目次から見たい項目へ移動すると便利ですよ。

目次

日付から年、月、日、曜日、週を取得

日付から年、月、日、曜日、週を取得してみます。

日付から年、月、日を取得(Year、Month、Day)

日付から年、月、日を取得するには、「Year」、「Month」、「Day」を使います。

VBAコードは次のようになります。

Sub TEST1()
  
  Dim A
  A = "2022/5/11"
  
  Debug.Print Year(A) '年
  Debug.Print Month(A) '月
  Debug.Print Day(A) '日
  
End Sub

では、実行してみます。

日付から年、月、日を取得

日付から年、月、日を取得します

日付から年、月、日を取得できました。

日付から曜日を取得(Format)

日付から曜日を取得するには、「Format」を使います。

日付から曜日を取得

日付から曜日を取得するVBAコードになります。

Sub TEST2()
  
  Dim A
  A = "2022/5/11"
  
  '曜日を取得
  Debug.Print Format(A, "aaa")
  
End Sub

実行してみます。

日付から曜日を取得できます

日付から「水」を取得できました。

こんな感じで、日付から曜日を取得できます。

日付から長い曜日を取得

長い曜日を取得したい場合は、Formatの引数に「"aaaa"」を入力します。

Sub TEST3()
  
  Dim A
  A = "2022/5/11"
  
  '長い曜日を取得
  Debug.Print Format(A, "aaaa")
  
End Sub

では、実行してみます。

日付から長い曜日を取得できます

「水曜日」を取得できました。

こんな感じで、日付から長い曜日を取得できます。

週の何日目かを取得(Weekday)

週の何日目かを取得するには、「Weekday」を使います。

週の何日目かを取得

週の何日目かを取得するVBAコードです。

Sub TEST4()
  
  Dim A
  A = "2022/5/11"
  
  '週の何日目かを取得
  Debug.Print Weekday(A)
  
End Sub

実行してみます。

週の何日目かを取得できます

結果は、「2022/5/11」は、週の「4」日目となりました。

カレンダーで確認してみます。

「2022/5/11」は、週の4日目になります

「2022/5/11」は、週の4日目ですので、正しく取得できています。

月曜始まりで、週の何日目かを取得

月曜始まりの場合で、週の何日目かを取得したい場合は、Weekdayの引数に「vbMonday」を入力します。

Sub TEST5()
  
  Dim A
  A = "2022/5/11"
  
  '月曜始まりで週の何日目かを取得
  Debug.Print Weekday(A, vbMonday)
  
End Sub

では、実行してみます。

月曜日始まりで、週の何日目かを取得できます

月曜日始まりで、「2022/5/11」は、週の「3日目」となりました。

カレンダーで確認してみます。

「2022/5/11」は、月曜始まりで週の3日目になります

月曜始まりで、「2022/5/11」は、週の「3日目」なので、正しく取得できています。

月の何週目かを取得(DateDiff)

月の何週目かを取得するには、「DateDiff」を使います。

月の何週目かを取得

手順は、

  • 指定年月の1日との週の差分を取得
  • 1週間を足す

という感じです。

Sub TEST6()
  
  Dim A
  A = "2022/1/16"
  B = DateSerial(Year(A), Month(A), 1) '2022/1/1を取得
  
  '月の何週目かを取得
  Debug.Print DateDiff("ww", B, A) + 1
  
End Sub

実行してみます。

2週目を取得できます

「2」週目を取得できました。

では、カレンダーで確認してみます。

「2022/5/11」は、2週目になります

「2022/5/11」は、「2週目」なので、正しく取得できています。

月曜始まりで、月の何週目かを取得

月曜始まりの場合で、月の何週目かを取得したい場合は、DateDiffの第4引数に「vbMonday」を入力します。

Sub TEST7()
  
  Dim A
  A = "2022/1/16"
  B = DateSerial(Year(A), Month(A), 1) '2022/1/1を取得
  
  '月曜始まりで、月の何週目かを取得
  Debug.Print DateDiff("ww", B, A, vbMonday) + 1
  
End Sub

では、実行してみます。

3週目を取得できます

「3」週目を取得できました。

では、カレンダーで確認してみます。

「2022/5/11」は、月曜始まりで、「3週目」になります

「2022/5/11」は、月曜始まりで、「3週目」なので、正しく取得できています。

月の何週目かを取得する方法について、詳細はこちらにまとめています。

日付を取得

次は、日付を取得してみます。

年、月、日から日付を取得(DateSerial)

年、月、日から日付を取得するには、「DateSerial」を使います。

Sub TEST8()
  
  '年、月、日から日付を取得
  Debug.Print DateSerial(2022, 5, 11)
  
End Sub

実行してみます。

年、月、日から日付を取得

年、月、日から日付を取得できます

年、月、日から日付を取得できました。

日付から1日と月末を取得(DateSerial)

「DateSerial」を使えば、日付から「1日」と「月末」を取得することができます。

日付から1日を取得

日付から1日を取得するVBAコードになります。

Sub TEST9()
  
  Dim A
  A = "2022/5/11"
  
  '指定した年月の「1日」を取得
  Debug.Print DateSerial(Year(A), Month(A), 1)
  
End Sub

実行してみます。

指定した日付から、1日を取得することができます

「2022/05/01」を取得できました。

指定した日付から、1日を取得できています。

日付から月末を取得

日付から月末を取得するには、「月」に「+1」して、「日」を「0」とします。

Sub TEST10()
  
  Dim A
  A = "2022/5/11"
  
  '指定した年月の「月末」を取得
  Debug.Print DateSerial(Year(A), Month(A) + 1, 0)
  
End Sub

実行してみます。

指定した日付から、月末を取得できます

「2022/05/31」を取得できました。

指定した日付から、月末を取得できています。

今日の日付を取得(Date)

今日の日付を取得するには、「Date」を使います。

Sub TEST11()
  
  '今日の日付を取得
  Debug.Print Date
  
End Sub

実行してみます。

今日の日付を取得

今日の日付を取得できます

今日の日付は、「2022/05/11」なので、正しく今日の日付を取得できています。

週初めの日付を取得(Weekday)

週初めの日付を取得するには、「Weekday」を使います。

週初めの日付を取得

手順は、

  • 指定した日付から曜日の数値分だけ引く
  • 1日を足す

という感じです。

Sub TEST12()
  
  Dim A
  A = CDate("2022/5/11")
  
  '週初めの日付を取得
  Debug.Print A - Weekday(A) + 1
  
End Sub

では、実行してみます。

週初めの日付を取得できます

「2022/05/08」を取得できました。

では、カレンダーで確認してみます。

「2022/5/11」の週初めは、「5/8」になります

「2022/5/11」の週初めは、「5/8」なので、正しく取得できています。

月曜始まりで週初めの日付を取得

月曜始まりで、週初めの日付を取得したい場合は、「Weekday」の第2引数に「vbMonday」を入力します。

Sub TEST13()
  
  Dim A
  A = CDate("2022/5/11")
  
  '月曜始まりで、週初めの日付を取得
  Debug.Print A - Weekday(A, vbMonday) + 1
  
End Sub

実行してみます。

月曜始まりで、週初めの日付を取得できます

「2022/05/09」を取得できました。

では、カレンダーで確認してみます。

「2022/5/11」の週始まりは、月曜始まりで、「5/9」になります

「2022/5/11」の週始まりは、月曜始まりで、「5/9」なので正しく取得できています。

週初めの日付を取得する方法について、詳細はこちらでまとめています。

日付の比較

日付の比較をする場合は、日付型に変換する必要があります。

日付に変換して比較(CDate)

日付の比較をしたい場合は、「CDate」を使って、日付型に変換して比較します。

文字列だとうまく日付を比較できません。

文字列だと日付を比較できない

文字列の場合で、日付を比較してみます。

Sub TEST14()
  
  Dim A, B
  A = "2022/5/1"
  B = "2022/05/02"
  
  Debug.Print A < B '←比較できない
  
End Sub

実行してみます。

文字列だと、日付の比較ができません

実際は、「2022/05/02」の方が「2022/5/1」より大きいんですけど、「False」となりました。

日付を比較したい場合は、「CDate」を使って日付型に変換します。

日付に変換すると比較できる

「CDate」を使って、日付型に変換して、日付を比較してみます。

Sub TEST15()
  
  Dim A, B
  A = CDate("2022/5/1") '日付に変換
  B = CDate("2022/05/02") '日付に変換
  
  '日付を比較
  Debug.Print A < B
  
End Sub

実行してみます。

日付に変換すると、日付の比較ができます

結果は、「True」となりました。

こんな感じで、日付に変換すると、日付の比較ができます。

日付の判定

日付の判定をする場合は、「IsDate」を使います。

日付と認識できるかを判定(IsDate)

「IsDate」を使って、日付と認識できるかを判定してみます。

「2022/5/11」は日付と認識

「2022/5/11」で、日付かを判定してみます。

Sub TEST16()
  
  Dim A
  A = "2022/5/11"
  
  '日付かを判定
  Debug.Print IsDate(A)
  
End Sub

実行してみます。

「2022/5/11」は、日付と認識することができます

結果は、「True」となりました。

「2022/5/11」は、日付と認識することができます。

「2022年5月11日」は日付と認識

次は、「2022年5月11日」でやってみます。

Sub TEST17()
  
  Dim A
  A = "2022年5月11日"
  
  '日付かを判定
  Debug.Print IsDate(A)
  
End Sub

実行してみます。

「2022年5月11日」は、日付と認識することができます

結果は、「True」となりました。

「2022年5月11日」も、日付と認識することができます。

「20220511」は日付と認識できない

次は、「20220511」でやってみます。

Sub TEST18()
  
  Dim A
  A = "20220511"
  
  '日付かを判定
  Debug.Print IsDate(A)
  
End Sub

実行してみます。

「20220511」は、日付と認識することができません

結果は、「False」となりました。

「20220511」は、日付と認識することができないです。

日付の加算(DateAdd)

日付の加算をしたい場合は、「DateAdd」を使うとできます。

1年後

指定した日付の「1年後」を取得してみます。

Sub TEST19()
  
  Dim A
  A = "2022/5/11"
  
  '1年を加算
  Debug.Print DateAdd("yyyy", 1, A)
  
End Sub

実行してみます。

1年後の日付を取得

1年後の日付を取得できます

1年後の日付を取得できました。

1か月後

指定した日付の「1か月後」を取得してみます。

Sub TEST20()
  
  Dim A
  A = "2022/5/11"
  
  '1か月を加算
  Debug.Print DateAdd("m", 1, A)
  
End Sub

実行してみます。

1か月後の日付を取得

1か月後の日付を取得できます

1か月後の日付を取得できました。

1日後

指定した日付の「1日後」を取得してみます。

「1日後」を取得したい場合は、「DateAdd」を使わなくても、「1」日を足せばいいです。

ただし最初に日付型に変換しておきます。

Sub TEST21()
  
  Dim A
  A = CDate("2022/5/11")
  
  '1日を加算
  Debug.Print A + 1
  
End Sub

実行してみます。

1日後の日付を取得

1日後の日付を取得できます

1日後の日付を取得できました。

1週間後

指定した日付の「1週間後」を取得したい場合も、「DateAdd」を使わないで、「7」日を足せば取得することができます。

最初に日付型に変換しておきます。

Sub TEST22()
  
  Dim A
  A = CDate("2022/5/11")
  
  '1週間を加算
  Debug.Print A + 7
  
End Sub

では、実行してみます。

1週間後の日付を取得

1週間後の日付を取得できます

1週間後の日付を取得できました。

日付のフォーマットを設定

日付のフォーマットを設定してみます。

日付のフォーマットを設定する方法は、2つあります。

  • 「Format」を使って文字列で取得する
  • セルの表示形式を設定して表示を変更する

という感じです。

それぞれやってみます。

日付のフォーマットを設定(Format)

「Format」を使って、日付のフォーマットを設定してみます。

「Format」を使った場合は、戻り値が「文字列」になります。

なので、表示を整えたいというときに使うといいです。

「yyyy/m/d」形式に変換

「yyyy/m/d」形式に変換してみます。

Sub TEST23()
  
  Dim A
  A = "2022/5/11"
  
  '「yyyy/m/d」形式で日付を取得
  Debug.Print Format(A, "yyyy/m/d")
  
End Sub

実行してみます。

「yyyy/m/d」形式に変換できます

結果は、「2022/5/11」となって、「yyyy/m/d」形式に変換できました。

日付に曜日を追加

日付に曜日を追加してみます。

Sub TEST24()
  
  Dim A
  A = "2022/5/11"
  
  '日付に曜日を追加
  Debug.Print Format(A, "yyyy/m/d(aaa)")
  
End Sub

では、実行してみます。

日付に曜日を追加できます

結果は、「2022/5/11(水)」となりました。

日付に曜日を追加できています。

和暦に変換

和暦に変換してみます。

Sub TEST25()
  
  Dim A
  A = "2022/5/11"
  
  '和暦に変換
  Debug.Print Format(A, "ggge年m月d日")
  
End Sub

では、実行してみます。

和暦に変換することができます

結果は、「令和4年5月11日」となりました。

和暦に変換することができます。

「Format」を使って書式を設定する方法について、詳細はこちらにまとめています。

セルの表示形式を変更する(.NumberFormatLocal)

セルの表示形式を変更して、日付の表示を変更したい倍は、「.NumberFormatLocal」を使います。

表示形式の変更なので、元の値はそのままで、表示のみを変更できます。

表示形式を「yyyy/mm/dd」形式にする

表示形式を「yyyy/mm/dd」形式にしてみます。

Sub TEST26()
  
  Range("A1") = "2022/5/11"
  '表示形式を「"yyyy/mm/dd"」形式に変更
  Range("A1").NumberFormatLocal = "yyyy/mm/dd"
  
End Sub

では、実行してみます。

表示形式を「yyyy/mm/dd」に変換できます

結果は、「2022/05/11」となって、表示形式を「yyyy/mm/dd」に変換できました。

曜日を追加した表示形式

次は、曜日を追加した表示形式に変更してみます。

Sub TEST27()
  
  Range("A1") = "2022/5/11"
  '曜日を追加した表示形式に変更
  Range("A1").NumberFormatLocal = "yyyy/m/d(aaa)"
  
End Sub

では、実行してみます。

曜日を追加した表示形式に設定できます

結果は、「2022/5/11(水)」となって、曜日を追加した表示形式を設定できました。

和暦の表示形式

次は、和暦の表示形式に設定してみます。

Sub TEST28()
  
  Range("A1") = "2022/5/11"
  '和暦の表示形式にする
  Range("A1").NumberFormatLocal = "ggge年m月d日"
  
End Sub

実行してみます。

和暦の表示形式にできます

結果は、「令和4年5月11日」となって、和暦の表示形式にできました。

セルの表示形式を設定する方法について、詳細はこちらでまとめています。

おわりに

この記事では、日付の取得や、比較、判定、加算、フォートマットの設定について、ご紹介しました。

日付の操作で使うVBAコードは、次のように複数あります。

  • Year
  • Month
  • Day
  • Format
  • Weekday
  • DateDiff
  • DateSerial
  • Date
  • CDate
  • IsDate
  • DateAdd
  • .NumberFormatLocal

日付の操作で、用途ごとに使うVBAコードを把握して、日付の操作についてマスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す