検索

キーワード


目次

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

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

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

こんにちは。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

「挑戦心」を忘れずに、新しいことにチャレンジしています。 資格:VBAエキスパート Excel VBA(ベーシック/スタンダード) 等

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート

よく読まれている記事