検索

キーワード


【Excel VBA】日付を操作する関数の紹介

  • 公開日:2021-04-24 00:19:23
  • 最終更新日:2021-04-21 23:02:57

こんにちは。IMMRです。ExcelVBAには、日付を操作する関数があります。

「頻繁に使われるもの」もあれば「あまり使われないもの」もありますがいくつか紹介していきます。

日付を操作をする関数

日付を操作をする関数① 【年・月・日を取得する】

日付から年、月、日を取得するには、Year関数Month関数Day関数を使用します。

指定した日付から年、月、日のいずれかを取得します。

書き方 Year(日付)Month(日付)Day(日付)


サンプルコード

※ "#"で囲むと日付リテラル値になります。順番としては、#月/日/年#となります。

Sub TEST1()
    MsgBox Year(#4/1/2021#)                                     ・・・1-1
    MsgBox Month(#4/1/2021#)                                     ・・・1-2
    MsgBox Day(#4/1/2021#)                                      ・・・1-3   
End Sub

1-1の実行結果は、「2021」

1-2の実行結果は、「4」

1-3の実行結果は、「1」とメッセージボックスが表示されます。


日付を操作をする関数② 【日付かどうか確認する】

日付かどうか確認するには、IsDate関数を使用します。

指定した文字列が日付かを確認して、日付ならTRUE、それ以外ならFALSEです。

書き方 ISDate(文字列)


サンプルコード

Sub TEST2()
    MsgBox IsDate(#4/1/2021#)                                                                    ・・・2-1
    MsgBox IsDate(12345)                                                                       ・・・2-2
    MsgBox IsDate("ABCDE")                                                                       ・・・2-3
End Sub

2-1の実行結果は、「TRUE

2-2の実行結果は、「FALSE

2-3の実行結果は、「FALSE」とメッセージボックスが表示されます。


日付を操作をする関数③ 【2つの日付の間隔を取得】

指定した2つの日付から間隔を取得するにはDateDiff関数を使用します。

指定した2つの日付から間隔を取得して、設定した日付単位で年単位、月単位、日単位を表示します。

書き方 DateDiff(時間単位, 日付1, 日付2)


時間単位

設定値内容
yyyy
m
y年間通算日
d
w週日
ww


サンプルコード

Sub TEST3()
    MsgBox DateDiff("y", #4/1/2020#, #4/1/2021#)                            ・・・3-1
    MsgBox DateDiff("yyyy", #4/1/2020#, #4/1/2021#)                           ・・・3-2
    MsgBox DateDiff("m", #4/1/2020#, #4/1/2021#)                              ・・・3-3
    MsgBox DateDiff("d", #5/1/2020#, #4/1/2021#)                            ・・・3-4
    MsgBox DateDiff("w", #4/1/2021#, #4/7/2021#)                                ・・・3-5
    MsgBox DateDiff("ww", #4/1/2021#, #4/7/2021#)                            ・・・3-6
End Sub

3-1の実行結果は、「365

3-2の実行結果は、「1

3-3の実行結果は、「12

3-4の実行結果は、「335

3-5の実行結果は、「0

3-6の実行結果は、「1」とメッセージボックスが表示されます。


日付を操作をする関数④ 【加算・減算した日付を取得】

指定日付から加算・減算した日付を取得するにはDataAdd関数を使用します。

指定した日付から加算・減算した日付を表示します。加算するのは年、月、日などがあります。

書き方 DataAdd(時間単位, 加算する数値, 日付)

※時間単位の詳細については、「日付を操作をする関数③ 【2つの日付の間隔を取得】」で説明したものと同じです。


サンプルコード

Sub TEST4()
    MsgBox DateAdd("y", 1, #4/1/2010#)                                                         ・・・4-1
    MsgBox DateAdd("yyyy", 1, #4/1/2010#)                                                        ・・・4-2
    MsgBox DateAdd("m", 2, #4/1/2010#)                                                          ・・・4-3
    MsgBox DateAdd("d", -10, #5/1/2010#)                                                        ・・・4-4
    MsgBox DateAdd("w", 1, #4/1/2010#)                                                         ・・・4-5
    MsgBox DateAdd("ww", 1, #4/1/2010#)                                                        ・・・4-6
End Sub

4-1の実行結果は、「2010/04/02

4-2の実行結果は、「2011/04/01

4-3の実行結果は、「2010/06/01

4-4の実行結果は、「2010/04/21

4-5の実行結果は、「2010/04/02

4-6の実行結果は、「2010/04/08」とメッセージボックスが表示されます。


日付を操作をする関数⑤ 【現在の日付+時間・日付】

現在の日付を取得するにはNow関数, Dare関数を使用します。

表示をした時の日付+時間、日付を表示します。そのため、処理を実行した日時によって変わります。

書き方 Now, Date ※設定値はありません。


サンプルコード

Sub TEST5()
    MsgBox Now                                               ・・・5-1
    MsgBox Date                                               ・・・5-2
End Sub

5-1の実行結果は、「処理を実行した日付+時間」 例:2021/04/01  19:45:30

5-2の実行結果は、「処理を実行した日付」例:2021/04/01   とメッセージボックスが表示されます。


日付を操作をする関数⑥ 【日付から曜日を取得】

指定日付から曜日を取得にはWeekday関数WeekdayName関数を使用します。

指定した日付からWeekday関数とWeekdayName関数を使用して、曜日を取得します。

方法については、下記記事で紹介していますので、ご参照下さい。

【Excel VBA】日付から曜日を確認する方法(WeekdayNameを使用)


日付を操作をする関数⑦ 【和暦の日付から西暦の日付を取得】

和暦の日付から西暦の日付から曜日を取得にはDateValue関数を使用します。

和暦の日付からDateValue関数より西暦の日付を取得します。

書き方 DateValue(日付)


サンプルコード

Sub TEST7()
    MsgBox DateValue("令和271日")                                ・・・7-1
End Sub

7-1の実行結果は、「2020/07/01」   とメッセージボックスが表示されます。


日付を操作をする関数⑧ 【日付の書式を変更する】

日付の書式を取得にはFormat関数を使用します。

日付の書式を変更しますが表示方法は記号で変わってきます。

書き方 Format(日付, 表示方法)


①表示方法(日付偏)

記号内容
yyyy西暦(4桁)
yy西暦(下2桁)
mm月(0~9の場合、頭に0が付く)
m月(0~9の場合、頭に0が付かない)
dd月(0~9の場合、頭に0が付く)
d月(0~9の場合、頭に0が付かない)

②表示方法(曜日偏)

記号内容
aaaa曜日(3文字で表示)
aaa曜日(頭1文字で表示)
dddd曜日(英語で表示)
ddd曜日(英語、頭3文字で表示)

③表示方法(年号偏)

記号
ggg年号
gg年号(頭1文字で表示)
ee和暦(0~9の場合、頭に0が付く)
e和暦(0~9の場合、頭に0が付かない)


サンプルコード① (日付偏)

Sub TEST8_1()
    MsgBox Format(#1/9/2020#, "yy")                                  ・・・8-1-1
    MsgBox Format(#1/9/2020#, "yyyy")                                 ・・・8-1-2
    MsgBox Format(#1/9/2020#, "mm")                                   ・・・8-1-3 
    MsgBox Format(#1/9/2020#, "m")                                   ・・・8-1-4
    MsgBox Format(#1/9/2020#, "dd")                                  ・・・8-1-5
    MsgBox Format(#1/9/2020#, "d")                                   ・・・8-1-6
End Sub

8-1-1の実行結果は、「20」

8-1-2の実行結果は、「2020」

8-1-3の実行結果は、「01」

8-1-4の実行結果は、「1」

8-1-5の実行結果は、「09」

8-1-6の実行結果は、「9」とメッセージボックスが表示されます。


サンプルコード② (曜日偏)

Sub TEST8_2()
    MsgBox Format(#1/9/2020#, "aaaa")                                  ・・・8-2-1
    MsgBox Format(#1/9/2020#, "aaa")                                   ・・・8-2-2
    MsgBox Format(#1/9/2020#, "dddd")                                  ・・・8-2-3
    MsgBox Format(#1/9/2020#, "ddd")                                   ・・・8-2-4
End Sub

8-2-1の実行結果は、「木曜日」

8-2-2の実行結果は、「木」

8-2-3の実行結果は、「Thursday」

8-2-4の実行結果は、「Thu」とメッセージボックスが表示されます。


サンプルコード③ (年号偏)

Sub TEST8_3()
    MsgBox Format(#1/9/2020#, "ggg")                                  ・・・8-3-1
    MsgBox Format(#1/9/2020#, "gg")                                   ・・・8-3-2
    MsgBox Format(#1/9/2020#, "ee")                                   ・・・8-3-3
    MsgBox Format(#1/9/2020#, "e")                                    ・・・8-3-4
End Sub

8-3-1の実行結果は、「令和」

8-3-2の実行結果は、「令」

8-3-3の実行結果は、「02」

8-3-4の実行結果は、「2」とメッセージボックスが表示されます。


今まで説明してきた(日付偏)、(曜日偏)、(年号偏)を結合して行うことも出来ます。

サンプルコード④ (結合偏)

Sub TEST8_4()
    MsgBox Format(#1/9/2020#, "yyyy/mm/dd")                           ・・・8-4-1
    MsgBox Format(#1/9/2020#, "yy年m月d日")                           ・・・8-4-2
    MsgBox Format(#1/9/2020#, "gge年m月d日")                           ・・・8-4-3
    MsgBox Format(#1/9/2020#, "ggge年mm月dd日")                         ・・・8-4-4
    MsgBox Format(#1/9/2020#, "ggee年mm月md日")                         ・・・8-4-5
    MsgBox Format(#1/9/2020#, "ggee年m月d日")                          ・・・8-4-6
    MsgBox Format(#1/9/2020#, "yyyy/mm/dd(aaaa)")                        ・・・8-4-7
    MsgBox Format(#1/9/2020#, "ggee年m月d日(ddd)")                       ・・・8-4-8
End Sub

8-4-1の実行結果は、「2020/01/09」

8-4-2の実行結果は、「20年1月9日」

8-4-3の実行結果は、「令2年1月9日」

8-4-4の実行結果は、「令和2年01月09日」

8-4-5の実行結果は、「令02年01月09日」

8-4-6の実行結果は、「令02年1月9日

8-4-7の実行結果は、「2020年01月09日(木曜日)」

8-4-8の実行結果は、「令02年1月9日(Thu)」とメッセージボックスが表示されます。



【著者】

Imamura

今まではExcel VBAの開発をしてきました。
開発を主にしたものや他の業務の効率化を目指して行ったものさまざまです。
現在は、他のプログラミング言語に挑戦して、スキルアップを目指しています。

よく読まれている記事