Dim A, B
'西暦
A = #1/1/2020#
B Format(A, "yyyy/mm/dd") '"2020/01/01"
B = Format(A, "yyyy/m/d") '"2020/1/1"
B = Format(A, "yy/mm/dd") '"20/01/01"
B = Format(A, "yyyymmdd") '"20200101"'数値
A = #1/1/2020#
B = Val(Format(A, "yyyymmdd")) '20200101'和暦
A = #1/1/2020#
B = Format(A, "ggge年mm月dd日") '"令和2年01月01日"
B = Format(A, "gge年mm月dd日") '"令2年01月01日"
B = Format(A, "ge年mm月dd日") '"R2年01月01日"'曜日
A = #1/1/2020#
B = Format(A, "yyyy/mm/dd(aaaa)") '"2020/01/01(水曜日)"
B = Format(A, "yyyy/mm/dd(aaa)") '"2020/01/01(水)"
B = Format(A, "yyyy/mm/dd(ddd)") '"2020/01/01(Wed)"
B = Format(A, "aaaa") '"水曜日"'時間
A = #1/1/2020 1:02:03 AM#
B = Format(A, "yyyy/mm/dd hh時mm分ss秒") '"2020/01/01 01時02分03秒"
B = Format(A, "yyyy/mm/dd hh:mm:ss") '"2020/01/01 01:02:03"
B = Format(A, "hh:mm:ss") '"01:02:03"'数値8桁を日付に変換
A = 20200101
B = CDate(Format(A, "@@@@/@@/@@")) '2020/01/01'日付データから一部データのみ取得
A = #1/1/2020 1:02:03 AM#
B = CDate(Format(A, "yyyy/mm/dd")) '2020/01/01
B = CDate(Format(A, "hh:mm:ss")) '1:02:03
では、解説していきます。
VBAで日付のフォーマットを変換するFormat
日付のフォーマットを変換するには、Formatを使うと便利です。
Formatは、文字列や日付、時間のフォーマットを変換することができます。
この記事では、Formatを使って、日付の書式を変換する方法についてご紹介します。
使い方(Format)
Formatへは、次のように引数を入力します。
『変換後の文字列 = Format(日付, 書式)』
では、よく使われる代表的な日付の書式への変換方法について具体的な方法を説明していきます。
西暦
まずは、西暦への書式変換について説明します。
西暦の変換は次の書式があります。
yyyy/mm/dd形式に変換する
yyyy/m/d形式に変換する
yy/m/d形式に変換する
yyyymmdd形式に変換する
では、それぞれのVBAコードと実行結果を記載します。
yyyy/mm/dd形式に変換する
日付『#1/1/2020#』を西暦のyyyy/mm/dd形式に変換するVBAコードです。
Sub TEST1()
Dim A
A = #1/1/2020#
MsgBox Format(A, "yyyy/mm/dd") 'yyyy/mm/dd形式へ変換
End Sub
実行します。
結果は、『"2020/01/01"』となりました。
変換後は、文字列となります。
yyyy/m/d形式に変換する
日付『#1/1/2020#』を西暦のyyyy/m/d形式に変換するVBAコードです。
例えば、1月は『"01"』ではなく『"1"』と表示させたい場合です。
Sub TEST2()
Dim A
A = #1/1/2020#
MsgBox Format(A, "yyyy/m/d") 'yyyy/m/d形式へ変換
End Sub
実行します。
結果は、『"2020/1/1"』となりました。
Formatの変換後は、文字列となります。
yy/m/d形式に変換する
日付『#1/1/2020#』を西暦のyy/mm/dd形式に変換するVBAコードです。
西暦の年を短縮して2桁で表示したい場合です。
例えば、2020年は『"20"』と表示したい場合です。
Sub TEST3()
Dim A
A = #1/1/2020#
MsgBox Format(A, "yy/mm/dd") 'yy/mm/dd形式へ変換
End Sub
実行します。
結果は、『"20/01/01"』となりました。
変換後は、文字列となります。
yyyymmdd形式に変換する
日付『#1/1/2020#』をyyyymmdd形式に変換するVBAコードです。
日付を数値だけの文字列に変換したい場合です。
Sub TEST4()
Dim A
A = #1/1/2020#
MsgBox Format(A, "yyyymmdd") 'yyyymmdd形式へ変換
End Sub
実行します。
結果は、『"20200101"』となりました。
変換後は、文字列となります。
西暦については、このような書式変換が多いかと思います。
数値
日付を、Formatを使って数値に変換する方法です。
こちらは、FormatとValを組み合わせて、変換することができます。
手順は、
①日付をFormatでyyyymmdd形式に変換する
②Valで文字列を数値に変換する
日付『#1/1/2020#』を数値8桁に変換するVBAコードです。
Sub TEST5()
Dim A, B
A = #1/1/2020#
B = Format(A, "yyyymmdd") 'yyyymmdd形式へ変換
MsgBox Val(B) '数値へ変換
End Sub
実行してみます。
数値8桁を日付に変換
結果は、『20200101』となりました。
変数の型は、数値となっています。
和暦
日付を和暦へ変換する方法もよく使われるかと思います。
次の和暦があります。
和暦
頭文字だけの和暦
アルファベット文字の和暦
では、VBAコードと実行結果について説明します。
和暦
日付を和暦に変換する方法です。
Formatに『"ggge年mm月dd日"』と入力するとできます。
日付『#1/1/2020#』を和暦へ変換するVBAコードです。
Sub TEST6()
Dim A
A = #1/1/2020#
MsgBox Format(A, "ggge年mm月dd日") '和暦へ変換
End Sub
実行してみます。
結果は、『"令和2年01月01日"』となりました。
頭文字だけの和暦
つづいて、日付を頭文字だけの和暦に変換する方法です。
元号の1文字目だけを表示する方法になります。
Formatに『"gge年mm月dd日"』と入力します。
日付『#1/1/2020#』を頭文字だけの和暦へ変換するVBAコードです。
Sub TEST7()
Dim A
A = #1/1/2020#
MsgBox Format(A, "gge年mm月dd日") '頭文字の和暦へ変換
End Sub
実行してみます。
結果は、『"令2年01月01日"』となりました。
アルファベット文字の和暦
日付をアルファベット文字の和暦に変換する方法です。
元号のアルファベット1文字目で表示する方法です。
Formatに『"ge年mm月dd日"』と入力するとできます。
日付『#1/1/2020#』をアルファベット1文字の和暦へ変換するVBAコードです。
Sub TEST8()
Dim A
A = #1/1/2020#
MsgBox Format(A, "ge年mm月dd日") 'アルファベットの和暦へ変換
End Sub
実行してみます。
結果は、『"R2年01月01日"』となりました。
曜日
Formatを使えば、日付に曜日を加えて変換することもできます。
曜日を付ける例としては次のパターンがあります。
長い曜日を加える
短い曜日を加える
英語の曜日を加える
曜日だけにする
では、VBAコードと実行結果について記載します。
長い曜日を加える
まずは、Formatを使って、日付に長い曜日を加えて変換する方法です。
長い曜日は、『(月曜日)』とかです。
Formatに『"yyyy/mm/dd(aaaa)"』を入力すればできます。
日付『#1/1/2020』を長い曜日を加えて変換するVBAコードです。
Sub TEST9()
Dim A
A = #1/1/2020#
MsgBox Format(A, "yyyy/mm/dd(aaaa)") '長い曜日を加える
End Sub
実行してみます。
結果は、『"2020/01/01(水曜日)"』となりました。
長い曜日を付けられました。
短い曜日を加える
つづいて、Formatを使って、日付に短い曜日を加えて変換する方法です。
短い曜日は、『(月)』とかです。
Formatに『"yyyy/mm/dd(aaa)"』を入力すればできます。
日付『#1/1/2020』を短い曜日を加えて変換するVBAコードです。
Sub TEST10()
Dim A
A = #1/1/2020#
MsgBox Format(A, "yyyy/mm/dd(aaa)") '短い曜日を加える
End Sub
実行してみます。
結果は、『"2020/01/01(水)"』となりました。
短い曜日を付けられました。
英語の曜日を加える
Formatを使って、日付に英語の曜日を加えて変換する方法です。
英語の曜日は、『(Mon)』とかです。
Formatに『"yyyy/mm/dd(ddd)"』を入力すればできます。
日付『#1/1/2020』を英語の曜日を加えて変換するVBAコードです。
Sub TEST11()
Dim A
A = #1/1/2020#
MsgBox Format(A, "yyyy/mm/dd(ddd)") '英語の曜日を加える
End Sub
実行してみます。
結果は、『"2020/01/01(Wed)"』となりました。
英語の曜日を付けられました。
曜日だけにする
Formatを使って、日付を曜日だけに変換する方法です。
Formatに『"aaaa"』を入力すればできます。
日付『#1/1/2020』を曜日に変換するVBAコードです。
Sub TEST12()
Dim A
A = #1/1/2020#
MsgBox Format(A, "aaaa") '曜日だけに変換
End Sub