大体でIT

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

大体でIT

Excel VBAで日付のフォーマットを変換する方法についてご紹介します。日付のフォーマットを変換するには、Formatを使えばできます。Formatを使えば、西暦、和暦、曜日を加える、などの書式変更ができます。Format、優秀です。

はじめに

この記事では、日付のフォーマットを変換する方法についてご紹介します。

日付のフォーマットを変換するには、VBA関数『Format』がかなり便利です。

西暦に変換したり、和暦に変換、曜日を加える、などFormatを覚えておけば書式の変換は楽になります。

さらに、数値8桁から日付に変換したり、日付型データから日付だけ、時間だけを取り出すこともできて優秀です。

では、説明していきます。

この記事で紹介すること

  • 日付のフォーマットを変換する方法

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

目次

ポイントとなるVBAコード

初めに、ポイントとなるVBAコードを記載しておきます。

VBAコードだけ確認したいという場合にご活用ください。

'西暦
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()
    
    a = #1/1/2020#
    
    b = Format(a, "yyyy/mm/dd") 'yyyy/mm/dd形式へ変換
    
    MsgBox b
    
End Sub

実行します。

Formatを使ってyyyy/mm/dd形式へ変換

結果は、『"2020/01/01"』となりました。

変換後は、文字列となります。

yyyy/m/d形式に変換する

日付『#1/1/2020#』を西暦のyyyy/m/d形式に変換するVBAコードです。

例えば、1月は『"01"』ではなく『"1"』と表示させたい場合です。

Sub TEST2()
    
    a = #1/1/2020#
    
    b = Format(a, "yyyy/m/d") 'yyyy/m/d形式へ変換
    
    MsgBox b
    
End Sub

実行します。

Formatを使ってyyyy/m/d形式へ変換

結果は、『"2020/1/1"』となりました。

Formatの変換後は、文字列となります。

yy/m/d形式に変換する

日付『#1/1/2020#』を西暦のyy/mm/dd形式に変換するVBAコードです。

西暦の年を短縮して2桁で表示したい場合です。

例えば、2020年は『"20"』と表示したい場合です。

Sub TEST3()
    
    a = #1/1/2020#
    
    b = Format(a, "yy/mm/dd") 'yy/mm/dd形式へ変換
    
    MsgBox b
    
End Sub

実行します。

Formatを使ってyy/mm/dd形式へ変換

結果は、『"20/01/01"』となりました。

変換後は、文字列となります。

yyyymmdd形式に変換する

日付『#1/1/2020#』をyyyymmdd形式に変換するVBAコードです。

日付を数値だけの文字列に変換したい場合です。

Sub TEST4()
    
    a = #1/1/2020#
    
    b = Format(a, "yyyymmdd") 'yyyymmdd形式へ変換
    
    MsgBox b
    
End Sub

実行します。

Formatを使ってyyyymmdd形式へ変換

結果は、『"20200101"』となりました。

変換後は、文字列となります。

西暦については、このような書式変換が多いかと思います。

数値

日付を、Formatを使って数値に変換する方法です。

こちらは、FormatとValを組み合わせて、変換することができます。

手順は、

  • ①日付をFormatでyyyymmdd形式に変換する
  • ②Valで文字列を数値に変換する

日付『#1/1/2020#』を数値8桁に変換するVBAコードです。

Sub TEST5()
    
    a = #1/1/2020#
    
    b = Format(a, "yyyymmdd") 'yyyymmdd形式へ変換
    
    c = Val(b) '数値へ変換
    
    MsgBox c
    
End Sub

実行してみます。

数値8桁を日付に変換

FormatとValを使って日付を数値8桁に変換した結果

結果は、『20200101』となりました。

変数の型は、数値となっています。

和暦

日付を和暦へ変換する方法もよく使われるかと思います。

次の和暦があります。

  • 和暦
  • 頭文字だけの和暦
  • アルファベット文字の和暦

では、VBAコードと実行結果について説明します。

和暦

日付を和暦に変換する方法です。

Formatに『"ggge年mm月dd日"』と入力するとできます。

日付『#1/1/2020#』を和暦へ変換するVBAコードです。

Sub TEST6()
    
    a = #1/1/2020#
    
    b = Format(a, "ggge年mm月dd日") '和暦へ変換
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って日付を長い和暦に変換した結果

結果は、『"令和2年01月01日"』となりました。

頭文字だけの和暦

つづいて、日付を頭文字だけの和暦に変換する方法です。

元号の1文字目だけを表示する方法になります。

Formatに『"gge年mm月dd日"』と入力します。

日付『#1/1/2020#』を頭文字だけの和暦へ変換するVBAコードです。

Sub TEST7()
    
    a = #1/1/2020#
    
    b = Format(a, "gge年mm月dd日") '頭文字の和暦へ変換
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って日付を頭文字だけの和暦に変換した結果

結果は、『"令2年01月01日"』となりました。

アルファベット文字の和暦

日付をアルファベット文字の和暦に変換する方法です。

元号のアルファベット1文字目で表示する方法です。

Formatに『"ge年mm月dd日"』と入力するとできます。

日付『#1/1/2020#』をアルファベット1文字の和暦へ変換するVBAコードです。

Sub TEST8()
    
    a = #1/1/2020#
    
    b = Format(a, "ge年mm月dd日") 'アルファベットの和暦へ変換
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って日付をアルファベット1文字の和暦に変換した結果

結果は、『"R2年01月01日"』となりました。

曜日

Formatを使えば、日付に曜日を加えて変換することもできます。

曜日を付ける例としては次のパターンがあります。

  • 長い曜日を加える
  • 短い曜日を加える
  • 英語の曜日を加える
  • 曜日だけにする

では、VBAコードと実行結果について記載します。

長い曜日を加える

まずは、Formatを使って、日付に長い曜日を加えて変換する方法です。

長い曜日は、『(月曜日)』とかです。

Formatに『"yyyy/mm/dd(aaaa)"』を入力すればできます。

日付『#1/1/2020』を長い曜日を加えて変換するVBAコードです。

Sub TEST9()
    
    a = #1/1/2020#
    
    b = Format(a, "yyyy/mm/dd(aaaa)") '長い曜日を加える
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って日付に長い曜日を加えて変換した結果

結果は、『"2020/01/01(水曜日)"』となりました。

長い曜日を付けられました。

短い曜日を加える

つづいて、Formatを使って、日付に短い曜日を加えて変換する方法です。

短い曜日は、『(月)』とかです。

Formatに『"yyyy/mm/dd(aaa)"』を入力すればできます。

日付『#1/1/2020』を短い曜日を加えて変換するVBAコードです。

Sub TEST10()
    
    a = #1/1/2020#
    
    b = Format(a, "yyyy/mm/dd(aaa)") '短い曜日を加える
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って日付に短い曜日を加えて変換した結果

結果は、『"2020/01/01(水)"』となりました。

短い曜日を付けられました。

英語の曜日を加える

Formatを使って、日付に英語の曜日を加えて変換する方法です。

英語の曜日は、『(Mon)』とかです。

Formatに『"yyyy/mm/dd(ddd)"』を入力すればできます。

日付『#1/1/2020』を英語の曜日を加えて変換するVBAコードです。

Sub TEST11()
    
    a = #1/1/2020#
    
    b = Format(a, "yyyy/mm/dd(ddd)") '英語の曜日を加える
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って日付に英語の曜日を加えて変換した結果

結果は、『"2020/01/01(Wed)"』となりました。

英語の曜日を付けられました。

曜日だけにする

Formatを使って、日付を曜日だけに変換する方法です。

Formatに『"aaaa"』を入力すればできます。

日付『#1/1/2020』を曜日に変換するVBAコードです。

Sub TEST12()
    
    a = #1/1/2020#
    
    b = Format(a, "aaaa") '曜日だけに変換
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って曜日に変換した結果

結果は、『"水曜日"』となりました。

曜日だけに変換できました。

時間

日付に時間も含まれている場合は、Formatで時間に変換することができます。

時間としては、代表的なところで次の書式があります。

  • 長い時間に変換
  • 短い時間に変換
  • 時間だけにする

では、VBAコードと実行結果をみていきます。

長い時間に変換

時間を含む日付を長い時間に変換するにはFormatに『"yyyy/mm/dd h時m分s秒"』と入力するとできます。

時間を含む日付『#1/1/2020 1:02:03 AM#』を長い時間に変換するVBAコードです。

Sub TEST13()
    
    a = #1/1/2020 1:02:03 AM#
    
    b = Format(a, "yyyy/mm/dd h時m分s秒") '長い時間に変換
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って長い時間に変換した結果

結果は、『"2020/01/01 1時間2分3秒"』となりました。

長い時間に変換できました。

短い時間に変換

時間を含む日付を短い時間に変換するにはFormatに『"yyyy/mm/dd hh:mm:ss"』と入力するとできます。

時間を含む日付『#1/1/2020 1:02:03 AM#』を短い時間に変換するVBAコードです。

Sub TEST14()
    
    a = #1/1/2020 1:02:03 AM#
    
    b = Format(a, "yyyy/mm/dd hh:mm:ss") '短い時間に変換
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って短い時間に変換した結果

結果は、『"2020/01/01 01:02:03"』となりました。

短い時間に変換できています。

時間だけにする

時間を含む日付を、時間だけに変換するにはFormatに『"hh:mm:ss"』と入力するとできます。

時間を含む日付『#1/1/2020 1:02:03 AM#』を時間だけに変換するVBAコードです。

Sub TEST15()
    
    a = #1/1/2020 1:02:03 AM#
    
    b = Format(a, "hh:mm:ss") '時間だけに変換
    
    MsgBox b
    
End Sub

実行してみます。

Formatを使って時間だけに変換した結果

結果は、『"01:02:03"』となりました。

時間だけに変換できました。

Formatを使って数値から日付に変換

Formatを使って数値8桁から日付に変換する方法についてご紹介します。

Formatは表示形式を指定して文字列に変えるだけでなく、数値から日付に変化などもできます。

数値8桁はCDateでは日付に変換できない

数値8桁があって、それを日付に変換したい場合を考えます。

日付に変換なので、CDateを使えば日付に変換できそうです。

しかし、数値8桁を日付と認識できないので、CDateで日付に変換はできません。

やってみます。

数値『20200101』をCDateを使って日付に変換しようとしてみます。

Sub TEST16()
    
    a = 20200101
    
    b = CDate(a) '日付に変換(エラーになります)
    
End Sub

実行してみます。

CDateを使って数値を日付に変換した結果

結果は、エラーとなります。

数値8桁を日付と認識できないので日付に変換はできません。

このときに、Formatの出番です。

Formatの"@@@@/@@/@@"を使って数値8桁を日付に変換

Formatを使って数値8桁を日付に変換する方法を説明します。

手順は、

  • ①日付をFormatで数値を日付の形式に変換する
  • ②CDateで文字列を日付に変換する

という流れになります。

数値『20200101』を日付に変換するVBAコードです。

Sub TEST17()
    
    a = 20200101
    
    b = Format(a, "@@@@/@@/@@") 'yyyy/mm/dd形式へ変換
    
    c = CDate(b) '日付に変換
    
    MsgBox c
    
End Sub

実行してみます。

Formatで@@@@/@@/@@を使って数値8桁を日付に変換した結果

結果は、『2020/01/01』となりました。

変数の型も、日付となっています。

Format、使えます。

日付型のデータを一部データだけに変換

日付型のデータから、一部のデータだけに変換する方法を紹介します。

例えば次のような場合です。

  • 日付+時間のデータを日付だけの日付型データにする
  • 日付+時間のデータを時間だけの日付型データにする

日付と時間のデータがあるけど、日付だけのデータにしたいとか、時間だけのデータにしたい、といった場合です。

日付+時間のデータを日付だけに変換

日付と時間の日付型データを、日付だけの日付型データに変換する方法です。

日付型データ『#1/1/2020 1:02:03 AM#』から日付だけの日付型データに変換してみます。

Sub TEST18()
    
    a = #1/1/2020 1:02:03 AM#
    
    b = Format(a, "yyyy/mm/dd") 'yyyy/mm/dd形式へ変換
    
    c = CDate(b) '日付に変換
    
    MsgBox c
    
End Sub

実行してみます。

日付だけの日付型データに変換

Formatを使って日付データから日付だけの日付型データに変換した結果

結果は、『2020/01/01』となりました。

変数の型は、日付型となっています。

日付だけの日付型データに変換できました。

日付+時間のデータを時間だけに変換

日付と時間の日付型データを時間だけの日付型データに変換する方法です。

日付型データ『#1/1/2020 1:02:03 AM#』から、時間だけの日付型データに変換してみます。

Sub TEST19()
    
    a = #1/1/2020 1:02:03 AM#
    
    b = Format(a, "hh:mm:ss") '時間だけに変換
    
    c = CDate(b) '日付に変換
    
    MsgBox c
    
End Sub

実行してみます。

時間だけの日付型データに変換

Formatを使って日付データから、時間だけの日付型データに変換した結果

結果は、『1:02:03』となりました。

変数の型は、日付型となっています。

時間だけの日付型データに変換できました。

おわりに

この記事では、日付のフォーマットを変換する方法についてご紹介しました。

日付のフォーマットを変換するには、VBA関数『Format』がかなり便利です。

西暦に変換したり、和暦に変換、曜日を加える、などFormatを覚えておけば書式の変換は楽になります。

さらに、数値8桁から日付に変換したり、日付型データから日付だけ、時間だけを取り出すこともできて優秀です。

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

関連する記事から探す

カテゴリから探す

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

アーカイブから探す