この記事ではFormat関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
Format関数の使い方と注意点
Format関数は、数値や日付、文字列を任意の書式で整形する関数です。
構文
Format(値[, 書式][, 週の開始曜日][, 年の最初の週])
- 値 : 書式を適用したい値(数値・日付等)
- 書式 : 書式指定(省略可)
- 週の開始曜日 : 週の最初の曜日(省略可)
- 年の最初の週 : 年内で、最初の週(省略可)
使用例
Format関数には非常に多くの使用パターンがあります。
このページではよく使われる使用方法を記載します。
数値の書式例
数値の書式指定には主に以下の記号が使われます。
書式記号 | 表示形式 | 使用例 | 出力 |
---|---|---|---|
# | 1桁の数字 | Format(1.23, "##.###") | 1.23 |
0 | 1桁の数字 | Format(1.23, "00.000") | 01.230 |
, | 桁区切り記号 | Format(1234, "#,###") | 1,234 |
% | パーセント表示 | Format(0.25, "0%") | 25% |
日時の書式例
日時の書式指定には主に以下の記号が使われます。
※SampleDateは2025/04/01 01:02:03
書式記号 | 表示形式 | 使用例※ | 出力※ |
---|---|---|---|
yy | 西暦の下2桁 | Format(SampleDate, "yy") | 25 |
yyyy | 西暦の4桁 | Format(SampleDate, "yyyy") | 2025 |
m | 月 | Format(SampleDate, "m") | 4 |
mm | 月(1桁の場合は0がつく) | Format(SampleDate, "mm") | 04 |
d | 日 | Format(SampleDate, "d") | 1 |
dd | 日(1桁の場合は0がつく) | Format(SampleDate, "dd") | 01 |
aaa | 日本語の曜日の頭文字 | Format(SampleDate, "aaa") | 火 |
aaaa | 日本語の曜日 | Format(SampleDate, "aaaa") | 火曜日 |
ddd | 英語の曜日の先頭3文字 | Format(SampleDate, "ddd") | Tue |
dddd | 英語の曜日 | Format(SampleDate, "dddd") | Tuesday |
ww | 一年の内で何週目か | Format(SampleDate, "ww") | 14 |
y | 一年の内で何日目か | Format(SampleDate, "y") | 91 |
oooo | 日本語の月名 | Format(SampleDate, "oooo") | 4月 |
q | 一年の内で何番目の四半期か | Format(SampleDate, "q") | 2 |
g | 年号を表すアルファベット | Format(SampleDate, "g") | R |
gg | 年号の頭文字 | Format(SampleDate, "gg") | 令 |
ggg | 年号 | Format(SampleDate, "ggg") | 令和 |
e | 和暦 | Format(SampleDate, "e") | 7 |
ee | 和暦(1桁の場合は0がつく) | Format(SampleDate, "ee") | 07 |
h | 時 | Format(SampleDate, "h") | 1 |
hh | 時(1桁の場合は0がつく) | Format(SampleDate, "hh") | 01 |
m | 分 | Format(SampleDate, "n") | 2 |
mm | 分(1桁の場合は0がつく) | Format(SampleDate, "nn") | 02 |
s | 秒 | Format(SampleDate, "s") | 3 |
ss | 秒(1桁の場合は0がつく) | Format(SampleDate, "ss) | 03 |
上記を組み合わせることで様々な形式で日時を扱うことができます。
Sub Sample()
Dim SampleDate As Date
SampleDate = "2025/04/01 01:02:03"
Debug.Print Format(SampleDate, "yyyy/mm/dd")
Debug.Print Format(SampleDate, "ggge年m月d日(aaa)")
Debug.Print Format(SampleDate, "hh:nn:ss")
End Sub
▶ 出力結果
2025/04/01
令和7年4月1日(火)
01:02:03
週の開始曜日を指定する場合
Format 関数で "ww"(週番号)を使う際、「週の始まりが何曜日か」によって、同じ日付でも属する週番号が異なることがあります。
これは、国や業種によって「週の始まり」が異なるためです。
たとえば、日本やアメリカでは日曜日始まり、ヨーロッパや国際基準では月曜日始まりが一般的です。
また、小売業や物流業などでは業務の都合で土曜日始まりが採用されるケースもあります。
このように、用途や文化によって異なる「週の始まり」を明確に指定できるのが、Format 関数の第3引数です。
第3引数には以下の定数または値を使用します。
定数 | 値 | 週の開始日 |
---|---|---|
vbUseSystemDayOfWeek | 0 | システム設定に従う |
vbSunday | 1 | 日曜日(デフォルト) |
vbMonday | 2 | 月曜日 |
vbTuesday | 3 | 火曜日 |
vbWednesday | 4 | 水曜日 |
vbThursday | 5 | 木曜日 |
vbFriday | 6 | 金曜日 |
vbSaturday | 7 | 土曜日 |
以下の使用例では2025年1月5日
が各曜日を開始曜日とした場合に何週目に該当するのかを出力しています。
2025年1月は以下のようなカレンダーとなっています。
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
Sub Sample()
Dim d As Date
d = #1/5/2025# ' 日曜日
Debug.Print "日曜始まり : " & Format(d, "ww") & "週目"
Debug.Print "月曜始まり : " & Format(d, "ww", vbMonday) & "週目"
Debug.Print "土曜始まり : " & Format(d, "ww", vbSaturday) & "週目"
End Sub
▶ 出力結果
日曜始まり : 2週目
月曜始まり : 1週目
土曜始まり : 2週目
この結果は、Format 関数が指定された曜日を「週の開始日」として週番号を計算していることを示しています。
以下に各ケースの意味を説明します。
-
日曜始まり
週の定義:日曜日~土曜日。
2024年12月29日(日)〜2025年1月4日(土)が「第1週」。
1月5日(日) は翌週の始まり=「第2週
」と判断されます。 -
月曜始まり
週の定義:月曜日~日曜日。
2024年12月30日(月)〜2025年1月5日(日)が「第1週」。
1月5日(日) はその週の最終日=「第1週
」に属することになります。 -
土曜始まり
週の定義:土曜日~金曜日。
2025年1月4日(土)〜1月10日(金)が「第2週」。
1月5日(日) はこの週の2日目にあたるため、「第2週
」と判定されます。
年の最初の週を指定する場合
Format 関数で "ww"(週番号)を使用する際、「どの週を1年の第1週とするか」という定義によって、
年始の日付が「第0週」「第1週」「第2週」など、異なる週番号になることがあります。
これは、国際規格や業務ルールによって「第1週」の定義が異なるためです。
たとえば、アメリカや日本では1月1日を含む州を第1週、ヨーロッパや国際基準では4日以上ある州を第1週とされます。
このように、「年の第1週」の定義を明示できるのが、Format 関数の第4引数です。
第4引数には以下の定数または値を使用します。
定数 | 値 | 説明 |
---|---|---|
vbUseSystem | 0 | システム設定に従う |
vbFirstJan1 | 1 | 1月1日を含む週を第1週(デフォルト) |
vbFirstFourDays | 2 | 4日以上含む最初の週を第1週 |
vbFirstFullWeek | 3 | 最初の7日間すべて含まれる週を第1週 |
以下の使用例では2025年1月1日
が各基準で何週目に該当するのかを出力しています。
2025年1月は以下のようなカレンダーとなっています。
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
Sub Sample()
Dim d As Date
d = #1/1/2025# ' 水曜日
Debug.Print "1月1日を含む週 : " & Format(d, "ww", , vbFirstJan1) & "週目"
Debug.Print "4日以上ある最初の週 : " & Format(d, "ww", , vbFirstFourDays) & "週目"
Debug.Print "完全な最初の週 : " & Format(d, "ww", , vbFirstFullWeek) & "週目"
End Sub
▶ 出力結果
1月1日を含む週 : 1週目
4日以上ある最初の週 : 1週目
完全な最初の週 : 52週目
-
1月1日を含む週
2025年1月1日(水)〜2025年1月4日(土)が「第1週」。 -
4日以上ある最初の週
2025年1月1日(水)〜2025年1月4日(土)が「第1週」。 -
完全な最初の週
2025年の最初の完全な週は1月5日(日)から始まります。
そのため、2025年1月1日は前年2024年の最後の週に含まれると見なされ、「52週目」として表示されます。
文字列の書式例
文字列の書式指定には主に以下の記号が使われます。
書式記号 | 表示形式 | 使用例 | 出力 |
---|---|---|---|
@ | 1文字※ | Format("ABCdef", "@@@@@@@@@") | " ABCdef" |
& | 1文字※ | Format("ABCdef", "&&&&&&&&&") | "ABCdef" |
< | 文字列を小文字にする | Format("ABCdef", "<") | "abcdef" |
> | 文字列を大文字にする | Format("ABCdef", ">") | "ABCDEF" |
! | 文字列を左詰め | Format("ABCdef", "!@@@@@@@@@") | "ABCdef " |
※!がある場合を除き右詰めになります
定義済み書式
VBAには既存の定義済み書式もあります。
書式 | 表示形式 | 使用例 | 出力 |
---|---|---|---|
General Number | 桁区切り記号を付けずに表示 | Format("123456", "General Number") | 123456 |
Currency | システムロケールの通貨書式※に基づいて金額形式で表示 | Format("123456", "Currency") | ¥123,456 |
Fixed | 小数2桁(カンマなし)で表示 | Format("123456", "fixed") | 123456.00 |
Standard | カンマ区切り + 小数2桁で表示 | Format("123456", "Standard") | 123,456.00 |
Percent | 値×100 + %表示(小数は2桁) | Format("0.123456", "Percent") | 12.35% |
Scientific | 指数表記で表示 | Format("123456", "Scientific") | 1.23E+05 |
Yes/No | 数値が0の場合はNo、それ以外の場合はYesを表示 | Format("123456", "Yes/No") | Yes |
True/False | 数値が0の場合はFalse、それ以外の場合はTrueを表示 | Format("123456", "True/False") | True |
On/Off | 数値が0の場合はOff、それ以外の場合はOnを表示 | Format("123456", "On/Off") | On |
Short Date | システムロケールの短い日付書式※を使用して日付を表示 | Format("2025/04/05 01:02:03", "Short Date") | 2025/04/05 |
Long Date | システムロケールの長い日付形式※の書式に従って日付を表示 | Format("2025/04/05 01:02:03", "Long Date") | 2025年4月5日 |
Short Time | 時:分の形式で時間を表示 | Format("2025/04/05 01:02:03", "Short Time") | 01:02 |
Long Time | システムロケールの長い時間形式※を使用して時間を表示 | Format("2025/04/05 01:02:03", "Long Time") | 1:02:03 |
※システムロケールの設定は「コントロールパネル」→「時計と地域」→「地域」で表示されるウィンドウで確認できます。
通貨の設定等が表示されていない場合は「追加の設定」で表示されるウィンドウから確認できます。
設定アプリからも確認できますが、本ページでは省略します。
⚠️注意
戻り値は文字列(String)型
下記のようにFormat関数の戻り値は文字列(String)型です。
Sub Sample()
Dim SampleDate As Date
SampleDate = "2025/04/01 01:02:03"
Debug.Print Format(SampleDate, "yyyy")
Debug.Print TypeName(Format(SampleDate, "yyyy")) ' Format関数の戻り値の型を出力
End Sub
▶ 出力結果
2025
String
最下位に表示する記号を指定しないと空になる
下記のように表示する記号を指定しないと、値が0の時に空になってしまいます。
Sub Sample()
Debug.Print "format1 : [" & Format(0, "##") & "]"
Debug.Print "format2 : [" & Format(0, "#0") & "]"
End Sub
▶ 出力結果
format1 : []
format2 : [0]
「m」は月、「n」は分を表す
どちらも英訳すると頭文字がmですが、分はn
やnn
を使用します。
Sub Sample()
Dim SampleDate As Date
SampleDate = "2025/04/01 01:02:03"
Debug.Print "m : " & Format(SampleDate, "m")
Debug.Print "mm : " & Format(SampleDate, "mm")
Debug.Print "n : " & Format(SampleDate, "n")
Debug.Print "nn : " & Format(SampleDate, "nn")
End Sub
▶ 出力結果
m : 4
mm : 04
n : 2
nn : 02
定義値にはシステムロケールの設定を使用するものもある
使用例で述べたように定義値にはシステムロケールの設定を使用するものもあります。(通貨や日付等)
システムロケールの設定を使用するということは、PCや環境ごとに結果が変わってしまう恐れがあります。
そのため、他者や他のPCと共有して使用する場合には注意が必要です。
カスタム書式("¥#,##0.00"、"yyyy/mm/dd"等)を使用することも対処法の1つです。
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方