Format関数:数値や日付に書式を設定し文字列として取得する

Format 関数は Excel VBA で用意されている関数の一つで、数値や日付・時刻や文字列などの値に対して書式を設定し、文字列として取得します。ここでは Excel VBA における Format 関数の使い方について解説します。

(Last modified: )

Format関数の定義と使い方

Format 関数は引数に指定した数値や日付の値に書式を設定し文字列として返します。

Format(Expression)

1 番目の引数に対象となる数値や日付、時刻、文字列の値を指定します。省略可能な 2 番目の引数に書式を表す文字列を指定します。戻り値として書式が設定された値を文字列として取得します。

次の例を見てください。

Debug.Print Format(123456, "#,##0")  '123,456
Debug.Print Format("2023/02/14", "mmm d yyyy")  'Feb 14 2023

数値や日付の値に対して書式を設定し、文字列として取得しました。

それでは数値、日付、時刻、文字列に対してそれぞれどのような書式が設定できるのか解説します。

数値に対する書式設定

数値に対する書式の使い方です。あらかじめ用意されている名前付き数値書式を指定したり、または用意されている記号を組み合わせて自分で書式を定義することができます。

名前付き数値書式の種類

名前付き数値書式には次のようなものが用意されています。

書式名説明
General Number桁区切り記号を付けずに数を表示します
Currency適切な場合は、桁区切り記号を付けて数を表示します。小数点記号の右 2 桁を表示します。出力はシステム ロケール設定に基づきます
Fixed少なくとも整数部 1 桁、小数部 2 桁を表示します
Standard区切り記号を付けて、少なくとも整数部 1 桁、小数部 2 桁を表示します
Percent数値を 100 倍して、右側にパーセント記号 (%) を付けて表示します。小数部は常に 2 桁です
Scientific標準の指数表記を使用します
Yes/No数値が 0 の場合は No を表示します。それ以外の場合は Yes を表示します
True/False数値が 0 の場合は False を表示します。それ以外の場合は True を表示します
On/Off数値が 0 の場合は Off を表示します。それ以外の場合は On を表示します

名前付き数値書式を使用する場合は Format 関数の 2 番目の引数に書式名を文字列で記述してください。

数値、通貨、区切り表示など

数値をそのまま表示したり、通貨として表示したり、区切り文字を使って表示する場合です。

Option Explicit

Sub Format関数()
    Debug.Print Format(12345, "General Number")
    Debug.Print Format(12345.678, "General Number")
    Debug.Print Format(12345, "Currency")
    Debug.Print Format(12345.678, "Currency")
    Debug.Print Format(12345, "Fixed")
    Debug.Print Format(12345.678, "Fixed")
    Debug.Print Format(12345, "Standard")
    Debug.Print Format(12345.678, "Standard")
End Sub

数値に対する書式設定(1)

実行結果は次のようになります。

12345
12345.678
\12,345
\12,346
12345.00
12345.68
12,345.00
12,345.68

数値に対する書式設定(2)

"General Number" の場合は数値をそのまま表示します。 "Currency" の場合、日本の環境の場合は先頭に \ 記号を付け、小数点の位置で四捨五入されます。

"Fixed" の場合は小数部を 2 桁にして表示します。小数点以下がない場合は ".00" と表示し、小数点以下が 3 桁以上ある場合は 2 桁の位置で四捨五入します。

"Standard" の場合は小数部を 2 桁にして表示します。小数点以下がない場合は ".00" と表示し、小数点以下が 3 桁以上ある場合は 2 桁の位置で四捨五入します。また整数部は桁区切りを表示します。

パーセントと指数

次にパーセントと指数に関する書式です。

Option Explicit

Sub Format関数()
    Debug.Print Format(0.123456, "Percent")
    Debug.Print Format(0.123456, "Scientific")
    Debug.Print Format(1000000, "Scientific")
End Sub

数値に対する書式設定(3)

実行結果は次のようになります。

12.35%
1.23E-01
1.00E+06

数値に対する書式設定(4)

"Percent" の場合は数値を 100 倍して % を付けます。そのあとで小数部が 3 桁以上になる場合は 2 桁の位置で四捨五入します。"Scientific" の場合は数値を指数表記で表示します。

数値が 0 かそうでないか

次に対象の数値が 0 かそうでないかに関する書式です。

Option Explicit

Sub Format関数()
    Debug.Print Format(0, "Yes/No")
    Debug.Print Format(1, "Yes/No")
    Debug.Print Format(0, "True/False")
    Debug.Print Format(1, "True/False")
    Debug.Print Format(0, "On/Off")
    Debug.Print Format(1, "On/Off")
End Sub

数値に対する書式設定(5)

実行結果は次のようになります。

No
Yes
False
True
Off
On

数値に対する書式設定(6)

"Yes/No" の場合、数値が 0 なら "No" 、数値が 0 以外なら "Yes" と表示します。 "True/False" の場合、数値が 0 なら "True" 、数値が 0 以外なら "False" と表示します。 "On/Off" の場合、数値が 0 なら "On" 、数値が 0 以外なら "Off" と表示します。

ユーザー定義数値書式の種類

ユーザー定義数値書式には次のようなものが用意されています。

文字説明
0桁のところに数字があればその数字、桁のところに数字がない場合は 0 を表示します
#桁のところに数字があればその数字、桁のところに数字がない場合は何も表示しません
.小数点を表します
%数値を百倍して % を付けて表示します
,1,000 単位の区切り記号を表示します
E- E+ e- e+指数形式で表示します

ユーザー定義数値書式を使用する場合は Format 関数の 2 番目の引数に文字を組み合わせた書式を記述してください。

0を使った桁のプレースホルダー

"0" は桁に数値があればその数値を表示し、なければ代わりに 0 を表示します。小数点以下の書式を設定する場合は "." と組み合わせて設定します。小数部の書式の 0 の桁数よりも、実際の数値の桁数が多い場合は、小数部の 0 の桁数のところで四捨五入されます。

Option Explicit

Sub Format関数()
    Debug.Print Format(1, "000")
    Debug.Print Format(12, "000")
    Debug.Print Format(123, "000")
    Debug.Print Format(1234, "000")
    Debug.Print Format(1.2, "000.00")
    Debug.Print Format(1.256, "000.00")
End Sub

数値に対する書式設定(7)

実行結果は次のようになります。

001
012
123
1234
001.20
001.26

数値に対する書式設定(8)

#を使った桁のプレースホルダー

"#" は桁に数値があればその数値を表示し、なければ何も表示しません。小数点以下の書式を設定する場合は "." と組み合わせて設定します。小数部の書式の # の桁数よりも、実際の数値の桁数が多い場合は、小数部の # の桁数のところで四捨五入されます。

Option Explicit

Sub Format関数()
    Debug.Print Format(1, "#")
    Debug.Print Format(0, "#")
    Debug.Print Format(1, "#.##")
    Debug.Print Format(1.2, "#.##")
    Debug.Print Format(0.2, "#.##")
    Debug.Print Format(1.2356, "#.##")
End Sub

数値に対する書式設定(9)

実行結果は次のようになります。

1

1.
1.2
.2
1.24

数値に対する書式設定(10)

注意点として 1 桁の位置に "#" を記述したときに数値が 0 だったり 0.xx だった場合、 1 桁のところが何も表示されません。 0 のときは 0 と表示したい場合は 1 桁の位置は "#" ではなく "0" を記述してください。

Option Explicit

Sub Format関数()
    Debug.Print Format(0.23, "0.##")
    Debug.Print Format(0, "##0")
End Sub

数値に対する書式設定(11)

実行結果は次のようになります。

0.23
0

数値に対する書式設定(12)

1 桁の位置が 0 のときでも 0 と表示されました。

桁区切りの表示

"#" や "0" と組み合わせて "," を使用することで桁区切りを表示することができます。

Option Explicit

Sub Format関数()
    Debug.Print Format(12, "0,000")
    Debug.Print Format(1234, "0,000")
    Debug.Print Format(1234567, "0,000")
    Debug.Print Format(12, "#,##0")
    Debug.Print Format(1234, "#,##0")
    Debug.Print Format(1234567, "#,##0")
End Sub

数値に対する書式設定(13)

実行結果は次のようになります。

0,012
1,234
1,234,567
12
1,234
1,234,567

数値に対する書式設定(14)

パーセンテージでの表示

"#" や "0" と組み合わせて "%" を使用することでパーセンテージで表示することができます。

Option Explicit

Sub Format関数()
    Debug.Print Format(0.345, "0.00%")
    Debug.Print Format(0.34567, "0.00%")
    Debug.Print Format(0.345, "0.##%")
    Debug.Print Format(0.34567, "0.##%")
End Sub

数値に対する書式設定(15)

実行結果は次のようになります。

34.50%
34.57%
34.5%
34.57%

数値に対する書式設定(16)

指数形式での表示

"#" や "0" と組み合わせて "E+" を使用することで指数の形で表示することができます。 "E+" の代わりに "E-" を使うとプラスの場合は "+" が表示されなくなります。

Option Explicit

Sub Format関数()
    Debug.Print Format(0.3456789, "0.00E+00")
    Debug.Print Format(3456.789, "0.00E+00")
    Debug.Print Format(0.3456789, "##0.0E+0")
    Debug.Print Format(3456.789, "##0.0E+0")
    Debug.Print Format(0.3456789, "##0.0E-0")
    Debug.Print Format(3456.789, "##0.0E-0")
End Sub

数値に対する書式設定(17)

実行結果は次のようになります。

3.46E-01
3.46E+03
345.7E-3
345.7E+1
345.7E-3
345.7E1

数値に対する書式設定(18)

任意の文字列を追加して表示する場合

書式の中で文字列を追加で表示する場合、"-", "+", "$", "(" , ")" , " "の文字についてはそのまま記述できます。これ以外の文字の場合は文字の前に "\" を付けるか二重引用符で囲って記述します。二重引用符は Chr(34) で表せます。

Option Explicit

Sub Format関数()
    Debug.Print Format(1500, "$#,##0")
    Debug.Print Format(1500, "\\#,##0")
    Debug.Print Format(1500, "#,##\エ\ン")
    Debug.Print Format(1500, "#,##0" & Chr(34) & "ドル" & Chr(34))
End Sub

数値に対する書式設定(19)

実行結果は次のようになります。

$1,500
\1,500
1,500エン
1,500ドル

数値に対する書式設定(20)

特定の文字を除いて文字列を表示する場合は 1 文字毎に "\" を付けるか、二重引用符で囲ってまとめて記述します。

日付と時刻に対する書式設定

日付と時刻に対する書式の使い方です。あらかじめ用意されている名前付き日付/時刻書式を指定したり、または用意されている記号を組み合わせて自分で書式を定義することができます。

名前付き日付/時刻書式の種類

名前付き日付/時刻書式には次のようなものが用意されています。

書式名説明
General Date日付と時刻のどちらか、または両方を表示します。日付表示はシステム設定に依存します
Long Dateシステムの長い日付形式の書式に従って日付を表示します
Medium Dateホスト アプリケーションの言語バージョンで適切な、中間の長さの日付書式を使用して日付を表示します
Short Dateシステムの短い日付書式を使用して日付を表示します
Long Timeシステムの長い時間形式を使用して時間を表示します。時間、分、秒が含まれます
Medium Time時間と分を、12 時間の書式と AM/PM を使用して表示します
Short Time24 時間の形式を使用して時間を表示します

名前付き日付/時刻書式を使用する場合は Format 関数の 2 番目の引数に書式名を文字列で記述してください。それぞれ指定した場合は次のように表示されます。

Option Explicit

Sub Format関数()
    Debug.Print Format("2015/08/24 16:34:17", "General Date")
    Debug.Print Format("2015/08/24", "Long Date")
    Debug.Print Format("2015/08/24", "Medium Date")
    Debug.Print Format("2015/08/24", "Short Date")
    Debug.Print Format("16:34:17", "Long Time")
    Debug.Print Format("16:34:17", "Medium Time")
    Debug.Print Format("16:34:17", "Short Time")
End Sub

日付と時刻に対する書式設定(1)

実行結果は次のようになります。

2015/08/24 16:34:17
2015年8月24日
15-08-24
2015/08/24
16:34:17
04:34 午後
16:34

日付と時刻に対する書式設定(2)

名前付き日付/時刻書式を使う場合は、実行されている環境によっても結果は異なってくるかと思います。

ユーザー定義日付/時刻書式の種類

ユーザー定義日付/時刻書式には次のようなものが用意されています。

文字説明
:時刻の区切り文字
/日付の区切り文字
c日付を ddddd、時刻を ttttt 形式で、日付、時刻の順序で表示します。日付だけ、時刻だけの場合もあります
d先頭にゼロを付けずに 1 から 31 の数値で日を表示します
dd先頭にゼロを付けて 01 から 31 の数値で日表示します
ddd曜日を省略形 Sun から Sat として表示します
dddd曜日を完全な曜日名 Sunday から Saturday として表示します
ddddd日付を完全な日付 (日、月、および年を含む) で表示します。表示形式は各システムの短い日付形式の設定に従っています。 既定の短縮日付フォーマットは、m/d/yy です
dddddd日付の連続数値を完全な日付 (日、月、および年を含む) で表示します。表示形式は各システムが認識する長い日付形式の設定に従っています。 既定の長い日付形式は、mmmm dd, yyyy です
aaa曜日を省略形 "日" から "土" として表示します
aaaa曜日を完全な曜日名 "日曜日" から "土曜日" として表示します
w曜日を数値 (日曜日が 1 で土曜日が 7) で表示します
ww年の週を数値 (1 から 54) として表示します
m先頭にゼロを付けずに 1 から 12 の数値で月を表示します。 h または hh の直後に m が続く場合は、月ではなく分が表示されます
mm先頭にゼロを付けて 01 から 12 の数値で月を表示します。 h または hh の直後に m が続く場合は、月ではなく分が表示されます
mmm月を省略形 Jan から Dec として表示します
mmmm月を完全な月名 January から December として表示します
q年の四半期を数値 (1 から 4) として表示します
y年の日を数値 (1 から 366) として表示します
yy年を 2 桁の数値 (00 から 99) で表示します
yyyy年を 4 桁の数字 (100 から 9999) として表示します
g年号を M T S H R で返します
gg年号を "明" "大" "昭" "平" "令" で返します
ggg年号を "明治" "大正" "昭和" "平成" "令和" で返します
e年号での年を返します
ee年号での年を 2 桁の数値で返します
h先頭にゼロを付けずに 0 から 23 の数値で時間を表示します
hh先頭にゼロを付けて 00 から 23 の数値で時間を表示します
n先頭にゼロを付けずに 0 から 59 の数値で分を表示します
nn先頭にゼロを付けて 00 から 59 の数値で分を表示します
s先頭にゼロを付けずに 0 から 59 の数値で秒を表示します
ss先頭にゼロを付けて 00 から 59 の数値で秒を表示します
ttttt時刻を完全な時刻 (時間、分、および秒を含む) で表示します。表示形式は、各システムが認識する時刻書式で定義された時刻区切り文字を使用します。 先行ゼロ オプションが選択され、時刻が午前 10 時または午後 10 時より前の場合、先行ゼロが表示されます。既定の時刻形式は h:mm:ss です
AM/PM12 時間形式を使用し、午前に AM 午後に PM を表示します
am/pm12 時間形式を使用し、午前に am 午後に pm を表示します
A/P12 時間形式を使用し、午前に A 午後に P を表示します
a/p12 時間形式を使用し、午前に a 午後に p を表示します
AMPM12 時間形式を使用し、午前に "午前" 午後に "午後" を表示します

ユーザー定義数値書式を使用する場合は Format 関数の 2 番目の引数に文字を組み合わせた書式を記述してください。

日付に関する書式

日付に関する書式を組み合わせた例です。

Option Explicit

Sub Format関数()
    Debug.Print Format("2023/02/25", "yy/mm/dd")
    Debug.Print Format("2023/02/25", "yyyy/mm/dd")
    Debug.Print Format("2023/02/25", "mmmm dd, yyyy")
    Debug.Print Format("2023/02/25", "yyyy年m月d日")
    Debug.Print Format("2023/02/25", "yyyy/mm/dd(ddd)")
    Debug.Print Format("2023/02/25", "yyyy/mm/dd(aaaa)")
    Debug.Print Format("2023/02/25", "ggge年m月d日")
End Sub

日付と時刻に対する書式設定(3)

実行結果は次のようになります。

23/02/25
2023/02/25
February 25, 2023
2023年2月25日
2023/02/25(Sat)
2023/02/25(土曜日)
令和5年2月25日

日付と時刻に対する書式設定(4)

数値の場合と異なり書式の中に文字列を追加したい場合はそのまま記述して大丈夫です。

時刻に関する書式

時刻に関する書式を組み合わせた例です。

Option Explicit

Sub Format関数()
    Debug.Print Format("19:05:23", "hh:nn:ss")
    Debug.Print Format("19:05:23", "h時n分 AM/PM")
    Debug.Print Format("19:05:23", "h:nn:ss AMPM")
End Sub

日付と時刻に対する書式設定(5)

実行結果は次のようになります。

19:05:23
7時5分 PM
7:05:23 午後

日付と時刻に対する書式設定(6)

文字列に対する書式設定

文字列に対する書式の使い方です。用意されている記号を組み合わせて自分で書式を定義することができます。

ユーザー定義文字列書式の種類

ユーザー定義文字列書式には次のようなものが用意されています。

文字説明
@文字があれば文字を表示し、なければスペースを表示します
&文字があれば文字を表示し、なければ何も表示しません
<すべての文字を小文字にします
>すべての文字を大文字にします
!プレースホルダーを左から右に向かって埋めるように強制的に設定します(既定は右から左です)

ユーザー定義文字列書式を使用する場合は Format 関数の 2 番目の引数に文字を組み合わせた書式を記述してください。

Option Explicit

Sub Format関数()
    Debug.Print Format("Red", "@@@@@@")
    Debug.Print Format("Yellow", "@@@@@@")
    Debug.Print Format("Blue", "@@@@@@")
    Debug.Print Format("Red", "<")
    Debug.Print Format("Red", ">")
End Sub

文字列に対する書式設定(1)

実行結果は次のようになります。

   Red
Yellow
  Blue
red
RED

文字列に対する書式設定(2)

書式の文字に "@" を使う記述すると、その桁に文字があれば文字を、なければ代わりに空白を表示します。同じ書式を複数の文字列に適用することで、右揃えの形で表示させることができます。

大文字や小文字には変換する場合はすべての文字が対象になる点にご注意ください。一部の文字だけを対象とすることはできません。

複数の書式をまとめて記述し値によって適用する書式を変える

複数の書式をまとめて記述し、値によってそれぞれ異なる書式を適用させることができます。

数値に対する書式設定の場合

数値に対する書式の設定では最大で 4 つの異なる書式を一つの書式で設定することができます。複数の書式を記述する場合はセミコロン(;)で区切って記述します。

"書式1"
"書式1;書式2"
"書式1;書式2;書式3"
"書式1;書式2;書式3;書式4"

1 つの書式だけの場合はすべての数値に同じ書式が適用されます。

2 つの書式を指定した場合、 1 つ目の書式は正の数値、 2 つ目の書式は負の数値に適用されます。 0 は正の数値として扱われます

3 つの書式を指定した場合、 3 つ目の書式は 0 の値に適用されます。

4 つの書式を指定した場合、 4 つ目の書式は Null に適用されます。

次の例を見てください。

Option Explicit

Sub Format関数()
    Debug.Print Format("1234", "#,##0;(#,##0);ZERO")
    Debug.Print Format("-1234", "#,##0;(#,##0);ZERO")
    Debug.Print Format("0", "#,##0;(#,##0);\Z\E\R\O")
End Sub

複数の書式をまとめて記述し値によって適用する書式を変える(1)

実行結果は次のようになります。

1,234
(1,234)
ZERO

複数の書式をまとめて記述し値によって適用する書式を変える(2)

今回は 3 つの書式を記述していますので、対象の値が正の値か負の値か 0 かで適用される書式が異なります。

文字列に対する書式設定の場合

文字列に対する書式の設定では最大で 2 つの異なる書式を一つの書式で設定することができます。

"書式1"
"書式1;書式2"

1 つの書式だけの場合はすべての文字列に書式が適用されます。

2 つの書式を指定した場合、 2 つ目の書式は Null と長さが 0 の空文字 "" に適用されます。

次の例を見てください。

Option Explicit

Sub Format関数()
    Debug.Print Format("東京都", "@;(None)")
    Debug.Print Format("", "@;(None)")
End Sub

複数の書式をまとめて記述し値によって適用する書式を変える(3)

実行結果は次のようになります。

東京都
(None)

複数の書式をまとめて記述し値によって適用する書式を変える(4)

今回は 2 つの書式を記述していますので、対象の値が空文字または Null の場合と、そうではない場合で適用される書式が異なります。

-- --

Excel VBA における Format 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。