Format関数で日付・時刻・数値・文字を整形する方法

今回の目標

「日付の表示を変換したい!」や「数字を3桁ごとにカンマを入れたい!」と思ったあなたへ。
この記事では、Format関数の使い方を丁寧に解説します!
Format関数の変換前と変換後の使用サンプルつきです。

目標リスト

  • Format関数について、理解する
  • 日付の表示を変えられるようになる
  • 数字の表示を変えられるようになる

Format関数について

Format関数とは

Format 関数 は、文字列を変換する VBA の標準関数です。
主に日付や時刻、数字を変換します。
様々な変換ができるため、実務でも頻繁に利用されます。

Format関数の引数一覧と戻り値

Format 関数の構文

Format (Expression, Format, FirstDayOfWeek, FirstWeekOfYear)

Format 関数の引数一覧

※一部、Microsoft社のリファレンスを参照しています。
 【Microsoft公式】 Format 関数

引数名省略規定値説明
Expression不可-変換対象の値。日付型のデータや文字列、数値を指定可能
Format可能-変換方法を指定
FirstDayOfWeek可能vbSunday週の最初の曜日を指定
FirstWeekOfYear可能vbFirstJan1年内で、最初の週を指定

第二引数「Format」の年月日関連の定数一覧です。

記号説明
d第一引数の日にちを返す。1~31(0~9の時、0を付けない)
dd第一引数の日にちを返す。01~31(0~9の時、0を付ける)。
w週を数値化して返す。日曜を1とし、月曜なら2 のように連番。
ww1月1日から始め、第一引数の日付は何周目かを返す。
m第一引数の月を返す。1~12(0~9の時、0を付けない)。
mm第一引数の月を返す。01~12(0~9の時、0を付ける)。
mmm第一引数の月を先頭3文字の英語で返す。
mmmm第一引数の月を英語で返す
y第一引数の日付が、1月1日から数え、何日目か返す
yy第一引数の年の下2桁を返す
yyyy第一引数の年を返す

第二引数「Format」の時間関連の定数一覧です。

記号説明
h第一引数の何時(なんじ)を返す。0~23(0~9の時、0を付けない)。AM/PMを追加した場合、1~12を返す。
hh第一引数の何時(なんじ)を返す。00~23(0~9の時、0を付ける)。AM/PMを追加した場合、01~12を返す。
n第一引数の分を返す。0~59(0~9の時、0を付けない)。
nn第一引数の分を返す。00~59(0~9の時、0を付ける)。
m第一引数の分を返す。0~59(0~9の時、0を付けない)。ただし、"h" か "hh" が先行している場合のみ。
mm第一引数の分を返す。00~59(0~9の時、0を付ける)。ただし、"h" か "hh" が先行している場合のみ。
s第一引数の秒を返す。0~59(0~9の時、0を付けない)。
ss第一引数の秒を返す。00~59(0~9の時、0を付ける)。

日付の表示形式を変更する

1.日付の表示を変更する

Format関数の第二引数に "y"、 "m"、 "d" を指定すると、年月日を表示できます。 2025年なら、"yyyy" で 2025 、 "yy" で 25 となります。 "mm" や "dd" とすることで、数字が 1 ~ 9 の時に、10の位を 0 埋めすることが出来ます。
"aaa" で短い曜日(例:水)、"aaaa" で長い曜日(例:水曜日)となります。
"ddd" で短い曜日(例:Wed)、"dddd" で長い曜日(例:Wednesday)となります。

サンプルコード

Sub FormatSample_Date1()
    
    ' 2025年9月10日(水) に実行したと仮定
    Debug.Print "2025年9月10日(水) に実行したと仮定します。"

    ' 実行した年月日を表示する
    Debug.Print Date
    
    ' 日本(年月日形式)
    Debug.Print Format(Date, "yyyy年m月d日 (ddd)")
     日本など
    Debug.Print Format(Date, "yyyy/m/d (aaa)")
    
     アメリカの表記
    Debug.Print Format(Date, "m/d/yyyy (ddd)")
     ヨーロッパ圏の表記
    Debug.Print Format(Date, "d/m/yyyy (ddd)")
    
     ISO 8601形式(yyyy-mm-dd)
    Debug.Print Format(Date, "yyyy-mm-dd")
End Sub
【実行結果】

2025年9月10日(水) に実行したと仮定します。
Date → 2025/09/10(水)
yyyy年m月d日 (ddd) → 2025年9月10日 (Wed)
yyyy/m/d (aaa) → 2025/9/10 (水)
m/d/yyyy (ddd) → 9/10/2025 (Wed)
d/m/yyyy (ddd) → 10/9/2025 (Wed)
yyyy-mm-dd → 2025-09-10

2.時間の表示を変更する

Format関数の第二引数に "h"、 "m"(もしくは"n")、 "s" を指定すると、時刻を表示できます。 "hh" や "mm"("nn") 、 "ss" とすることで、数字が 1 ~ 9 の時に、10の位を 0 埋めすることが出来ます。
”h” の後ろに "AM/PM" で、12時間で時間表記で、AM や PM を付きます。 なお、AM/PM の際の時間は 1 ~ 12 と表示されます(0:15 → 12:15 AM、 1:15 → 1:15 AM)。

サンプルコード

Sub FormatSample_Date2()
    
    ' 17時30分5秒に実行したと仮定
    Debug.Print "17時30分5秒 に実行したと仮定します。"
    
    ' 何時何分何秒(区切りは ":")を表示する
    Debug.Print Time
    
    ' 何時何分(区切りは ":")を表示する
    Debug.Print Format(Time, "h:m")
    ' 何時何分を表示する
    Debug.Print Format(Time, "h時m分s秒")
    ' 何時何分何秒を表示する
    Debug.Print Format(Time, "hh時mm分ss秒")
    ' 12時間(AM/PM)形式で表示する
    Debug.Print Format(Time, "h:m AM/PM")
End Sub
【実行結果】

17時30分5秒に実行したと仮定します。
Time → 17:30:05
h:m → 17:30
hh:mm → 17:30
h時m分s秒 → 17時30分5秒
hh時mm分ss秒 → 17時30分05秒
h:m AM/PM → 5:30 PM

3.AM/PMで表示する

Format関数の第二引数に "h"、 "m"(もしくは"n") を指定した後に、"AM/PM" を指定すると12時間形式で時刻を表示できます。

サンプルコード

Sub FormatSample_Date3()
    
    ' 2025年9月10日(水) 17時30分5秒に実行したと仮定
    Debug.Print "2025年9月10日(水) 17時30分5秒 に実行したと仮定します。"
    
    Debug.Print Now
    
    Debug.Print Format(Now, "yy/mm/dd h:m")
    
    Debug.Print Format(Now, "yy/mm/dd h:m AM/PM")
End Sub
【実行結果】

2025年9月10日(水) 17時30分5秒 に実行したと仮定します。
Now → 2025/09/10(水) 17:30:05
yy/mm/dd h:m → 25/09/10 17:30
yy/mm/dd h:m AM/PM → 25/09/10 5:30 PM

数字の表示形式を変更する

1.小数点の桁数を一定にする(13.2→13.20)

Format関数の第二引数に "0.00" のように "." で、小数の桁数を指定できます。 "0.0" なら 1桁まで、"0.00" なら 2桁まで、"0.000" なら 3桁まで小数の桁数を指定できます。 桁数を超えた場合、四捨五入されます。
・"0.00" の例:0.10 → 0.1、0.15 → 0.15、0.155 → 0.16

"0.0#" のように、0 と # を組み合わせることも出来ます。 この場合、0 の桁は必ず表示され、# の桁は数字が存在すれば表示、小数がその桁数まで存在しなければ表示されません。
・"0.0#" の例:0.1 → 0.1、0.15 → 0.15、0.155 → 0.16

サンプルコード

Sub FormatSample_Number1()
    ' "13.00" と表示される
    Debug.Print "Format(13, ""0.00"") → " _
            & Format(13, "0.00")
    ' "13.20" と表示される
    Debug.Print "Format(13.2, ""0.00"") → " _
            & Format(13.2, "0.00")
    ' "13.79" と表示される
    Debug.Print "Format(13.785, ""0.00"") → " _
            & Format(13.785, "0.00")
    ' "13.4" と表示される
    Debug.Print "Format(13.4, ""0.0#"") → " _
            & Format(13.4, "0.0#")
    ' "45.678" と表示される
    Debug.Print "Format(45.678, ""0.00###"") → " _
            & Format(45.678, "0.00###")
    ' "13.58" と表示される
    Debug.Print "Format(13.579, ""0.0#"") → " _
            & Format(13.579, "0.0#")
End Sub
【実行結果】

Format(13, "0.00") → 13.00
Format(13.2, "0.00") → 13.20
Format(13.785, "0.00") → 13.79
Format(13.4, "0.0#") → 13.4
Format(45.678, "0.00###") → 45.678
Format(13.579, "0.0#") → 13.58

正数なら小数を表示させない場合

正数なら小数を一切表示させずに、小数がある場合は桁数を一定にする場合です。(例:123 → 123、 123.4 → 123.40)
If 構文を使い、Format関数の表示方法を変えましょう。

Function GetFormat(ByVal n As Double)
    Dim buf As Double
    ' Int関数は小数を切り捨てた Double型の整数を返す
    buf = Int(n) - n
    If buf = 0 Then
        GetFormat = Format(n, "#,##0")
    Else
        GetFormat = Format(n, "#,##0.00")
    End If
End Function

Sub FormatSample_Number1_Ex()
    ' 「:」で区切ると、1行に2ステップ記載できる
    Dim num1 As Double: num1 = 1234
    Dim num2 As Double: num2 = 5678.9
    
    Debug.Print GetFormat(num1)
    Debug.Print GetFormat(num2)
End Sub
【実行結果】

1,234
5,678.90

2.桁区切りをする(1000→1,000)

Format関数の第二引数に "#,##0" のように "," を指定すると、3桁ごとに "," で区切れます。 なお、小数を含む数字の場合、小数の設定(例:0.0)がされていないと、小数点以下は四捨五入されます。

サンプルコード

Sub FormatSample_Number2()
    ' "13" と表示される
    Debug.Print "Format(13, ""#,##0"") → " _
            & Format(13, "#,##0")
    ' "1,300" と表示される
    Debug.Print "Format(1300, ""#,##0"") → " _
            & Format(1300, "#,##0")
    ' "14" と表示される / 小数の設定なし
    Debug.Print "Format(13.5, ""#,##0"") → " _
            & Format(13.5, "#,##0")
    ' "1,234.50" と表示される / 小数の設定あり
    Debug.Print "Format(1234.5, ""#,##0.00"") → " _
            & Format(1234.5, "#,##0.00")
End Sub
【実行結果】

Format(13, "#,##0") → 13
Format(1300, "#,##0") → 1,300
Format(13.5, "#,##0") → 14
Format(1234.5, "#,##0.00") → 1,234.50

3.ゼロ埋めをする(100→0100)

Format関数の第二引数に "0000" と「0」で桁数分を指定すると、ゼロで埋めることができます。
なお、数値が指定の桁数以上の場合、そのまま値が文字列として返ります。

サンプルコード

Sub FormatSample_Number3()
    ' "0100" と表示される
    Debug.Print "Format(100, ""0000"") → " _
            & Format(100, "0000")
    ' "45678" と表示される
    Debug.Print "Format(45678, ""0000"") → " _
            & Format(45678, "0000")
End Sub
【実行結果】

Format(100, "0000") → 0100
Format(45678, "0000") → 45678

4.通貨形式にする(1000→¥1,000)

Format関数の第二引数に "¥¥#,##0" を指定すると、日本円形式で表示ができます。 「¥」が2つ続いていますが、「¥」はエスケープシーケンスのためです。 戻り値の文字列の「¥」は1つのみです。
なお、ドル形式の場合は "$#,##0.00" を指定します。

サンプルコード

Sub FormatSample_Number4()
    ' "¥1,234" と表示される
    Debug.Print "Format(1234, ""¥¥#,##0"") → " _
            & Format(1234, "¥¥#,##0")
    ' "$56.78" と表示される
    Debug.Print "Format(56.78, ""$#,##0.00"") → " _
            & Format(56.78, "$#,##0.00")
End Sub
【実行結果】

Format(1234, "¥¥#,##0") → ¥1,234
Format(56.78, "$#,0.00") → $56.78

5.パーセント形式にする(0.65→65%)

Format関数の第二引数に "%" を指定すると、数字がパーセント形式で表示されます。 パーセント表記にともない、数字は100倍されます。

サンプルコード

Sub FormatSample_Number5()
    ' "65%" と表示される
    Debug.Print "0.65 を ""0%"" で変換 → " _
            & Format(0.65, "0%")
    ' "85.5%" と表示される
    Debug.Print "0.855 を ""0.0%"" で変換 → " _
            & Format(0.855, "0.0%")
    ' "13.6%" と表示される
    Debug.Print "0.1357 を ""0.0%"" で変換 → " _
            & Format(0.1357, "0.0%")
End Sub
【実行結果】

0.65 を "0%" で変換 → 65%
0.855 を "0.0%" で変換 → 85.5%
0.1357 を "0.0%" で変換 → 13.6%

文字列の表示形式を変更する

1.固定の文字を追加する(10/1→期限:10/1)

Format関数の第二引数に " で括る(くくる)と、その文字を追加することが出来ます。 このとき、" という文字を引数に指定するため、 " を2つ続けてください。

サンプルコード

Sub FormatSample_FixedChar1()
    Dim s1 As String
    Dim s2 As String
    Dim d As Date
    ' 2025年9月30日
    d = DateSerial("2025", "9", "30")
    ' 売り上げ目標額は、100万円
    s1 = Format(1000000, """売上目標額:""#,##0""円""")
    ' 期限は、2025年9月30日
    s2 = Format(d, """期限:""yyyy/m/d")
    '売り上げ目標と期限を表示する
    Debug.Print s1
    Debug.Print s2
End Sub
【実行結果】

売上目標額:1,000,000円
期限:2025/9/30

"で括り忘れると・・・

" で括り忘れると、意図しない変換が行われる場合があります。
主に、アルファベットを表示する場合に牙をむきます。 例えば、"sales" という単語が "0al70" 等に変換されます。 「s → 秒」、「a」と「l」は変換無し、「e → 7(指数表記/科学技術表記)」、「s → 秒」で変換されています。

サンプルコード

Sub FormatSample_FixedChar2()
    ' " で括らない場合
    Debug.Print " "" で括らない場合"
    Debug.Print Format(Date, "Sales amount: yyyy/mm/dd")
    Debug.Print Format(Date, "deadline: yyyy/mm/dd")
    ' " で括った場合
    Debug.Print " "" で括った場合"
    Debug.Print Format(Date, """Sales amount:"" yyyy/mm/dd")
    Debug.Print Format(Date, """Deadline:"" yyyy/mm/dd")
End Sub
【実行結果】

" で括らない場合
0al70 a9ou0t: 2025/09/10
107a10li07: 2025/09/10
" で括った場合
Sales amount: 2025/09/10
Deadline: 2025/09/10

※ " で括らない場合は、第一引数や環境により、実行結果が変わります。

2.大文字/小文字を変換する(abc⇔ABC)

Format関数の第二引数に ">" を指定すると大文字に、"<" を指定すると小文字に変換します。
ただし、Format関数を使用した大文字小文字の変換は推奨されません。 なぜなら、「StrConv関数」の使用が一般的で可読性を下げてしまうためです。
・リンク:StrConv関数の大文字/小文字を変換する方法

サンプルコード

Sub FormatSample_String1()

    ' "Format("AbcD", ">") → ABCD" と表示される
    Debug.Print "Format(""AbcD"", "">"") → " _
            & Format("AbcD", ">")
    ' "Format("AbcD", "<") → abcd" と表示される
    Debug.Print "Format(""AbcD"", ""<"") → " _
            & Format("AbcD", "<")
            
    Debug.Print "Format(""yamada taro"", "" > ""Full Name:"""""") "
    ' > と 固定文字を連携する(大文字に変換して、固定文字を追加)
    Debug.Print " → " & Format("yamada taro", ">""Full Name:""")
End Sub
【実行結果】

Format("AbcD", ">") → ABCD
Format("AbcD", "<") → abcd
Format("yamada taro", " > "Full Name:""")
→ Full Name:YAMADA TARO

3.先頭や末尾に半角スペースで穴埋めする(abc→  abc)

Format関数の第二引数に "@" を指定すると、文字列の先頭を半角スペースで穴埋めします。
文字"A" を "@@@@@" で変換するケースで見てみます。文字"A"は1文字、"@" は5文字あります。 この場合は、2つの文字数の差4つ分、半角スペースが穴埋め(追加)されます。

"@" の先頭に "!" を付けることで、文字列の末尾に半角スペースで追加します。

余談になりますが、Space 関数という、引数の数値の数だけ半角スペースを返す関数があります。併せて覚えておくと良いでしょう。

サンプルコード

Sub FormatSample_String2()
    '"Format("Abc", "@@@@@") → [  Abc]" と表示される
    Debug.Print "Format(""Abc"", ""@@@@@"")  → " _
        & "[" & Format("Abc", "@@@@@") & "]"
    '"Format("Abc", "!@@@@@") → [Abc  ]" と表示される
    Debug.Print "Format(""Abc"", ""!@@@@@"") → " _
        & "[" & Format("Abc", "!@@@@@") & "]"
End Sub
【実行結果】

[Format("Abc", "@@@@@")] → [  Abc]
[Format("[Abc]", "!@@@@@")] → [Abc  ]

※ 実行結果の[]は、分かりやすくなるよう式で結合した文字です。

関連リンク

ページの先頭へ