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 のように連番。 |
ww | 1月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 ]