大体でIT
大体でIT
2022/5/12
Excel VBAで、日付の取得や、比較、判定、加算、フォートマットを設定する方法をご紹介します。日付を操作するVBAコードは複数あります。日付の操作はちょっとややこしいんですけど、用途ごとに使うVBAコードを把握して、日付の操作についてマスターしていきましょう。
この記事では、日付の取得や、比較、判定、加算、フォートマットの設定について、ご紹介します。
日付の操作で使うVBAコードは、次のように複数あります。
Year
Month
Day
Format
Weekday
DateDiff
DateSerial
Date
CDate
IsDate
DateAdd
.NumberFormatLocal
日付の操作で、用途ごとに使うVBAコードを把握して、日付の操作についてマスターしていきましょう。
日付の取得や、比較、判定、加算、フォーマットなどの日付の操作をマスターできます。
VIDEO
日付から年、月、日を取得(Year、Month、Day)
日付から年、月、日を取得するには、「Year」、「Month」、「Day」を使います。
Sub TEST1()
Dim A
A = "2022/5/11"
Debug.Print Year (A) '年
Debug.Print Month (A) '月
Debug.Print Day (A) '日
End Sub
日付から年、月、日を取得
日付から曜日を取得するには、「Format」を使います。
日付から曜日を取得
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」を使います。
週の何日目かを取得
Sub TEST4()
Dim A
A = "2022/5/11"
'週の何日目かを取得
Debug.Print Weekday (A)
End Sub
結果は、「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日目」なので、正しく取得できています。
月の何週目かを取得するには、「DateDiff」を使います。
月の何週目かを取得
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
「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
「2022/5/11」は、月曜始まりで、「3週目」なので、正しく取得できています。
月の何週目かを取得する方法について、詳細はこちらにまとめています。
年、月、日から日付を取得するには、「DateSerial」を使います。
Sub TEST8()
'年、月、日から日付を取得
Debug.Print DateSerial (2022, 5, 11)
End Sub
年、月、日から日付を取得
「DateSerial」を使えば、日付から「1日」と「月末」を取得することができます。
日付から1日を取得
Sub TEST9()
Dim A
A = "2022/5/11"
'指定した年月の「1日」を取得
Debug.Print DateSerial (Year(A), Month(A), 1 )
End Sub
日付から月末を取得
日付から月末を取得するには、「月」に「+1」して、「日」を「0」とします。
Sub TEST10()
Dim A
A = "2022/5/11"
'指定した年月の「月末」を取得
Debug.Print DateSerial (Year(A), Month(A) + 1 , 0 )
End Sub
今日の日付を取得するには、「Date」を使います。
Sub TEST11()
'今日の日付を取得
Debug.Print Date
End Sub
今日の日付を取得
今日の日付は、「2022/05/11」なので、正しく今日の日付を取得できています。
週初めの日付を取得するには、「Weekday」を使います。
週初めの日付を取得
Sub TEST12()
Dim A
A = CDate ("2022/5/11")
'週初めの日付を取得
Debug.Print A - Weekday(A) + 1
End Sub
「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/5/11」の週始まりは、月曜始まりで、「5/9」なので正しく取得できています。
週初めの日付を取得する方法について、詳細はこちらでまとめています。
日付の比較をする場合は、日付型に変換する必要があります。
日付の比較をしたい場合は、「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
こんな感じで、日付に変換すると、日付の比較ができます。
日付の判定をする場合は、「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」は、日付と認識することができます。
「2022年5月11日」は日付と認識
Sub TEST17()
Dim A
A = "2022年5月11日"
'日付かを判定
Debug.Print IsDate(A)
End Sub
「2022年5月11日」も、日付と認識することができます。
「20220511」は日付と認識できない
Sub TEST18()
Dim A
A = "20220511"
'日付かを判定
Debug.Print IsDate(A)
End Sub
「20220511」は、日付と認識することができないです。
日付の加算をしたい場合は、「DateAdd」を使うとできます。
Sub TEST19()
Dim A
A = "2022/5/11"
'1年を加算
Debug.Print DateAdd ("yyyy" , 1 , A)
End Sub
1年後の日付を取得
Sub TEST20()
Dim A
A = "2022/5/11"
'1か月を加算
Debug.Print DateAdd ("m" , 1 , A)
End Sub
1か月後の日付を取得
「1日後」を取得したい場合は、「DateAdd」を使わなくても、「1」日を足せばいいです。
Sub TEST21()
Dim A
A = CDate ("2022/5/11")
'1日を加算
Debug.Print A + 1
End Sub
1日後の日付を取得
指定した日付の「1週間後」を取得したい場合も、「DateAdd」を使わないで、「7」日を足せば取得することができます。
Sub TEST22()
Dim A
A = CDate ("2022/5/11")
'1週間を加算
Debug.Print A + 7
End Sub
1週間後の日付を取得
日付のフォーマットを設定する方法は、2つあります。
「Format」を使って文字列で取得する
セルの表示形式を設定して表示を変更する
「Format」を使って、日付のフォーマットを設定してみます。
「Format」を使った場合は、戻り値が「文字列」になります。
なので、表示を整えたいというときに使うといいです。
「yyyy/m/d」形式に変換
Sub TEST23()
Dim A
A = "2022/5/11"
'「yyyy/m/d」形式で日付を取得
Debug.Print Format (A, "yyyy/m/d" )
End Sub
結果は、「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
「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
結果は、「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コードを把握して、日付の操作についてマスターしていきましょう。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。