Format関数:数値や日付に書式を設定し文字列として取得する
Format 関数は Excel VBA で用意されている関数の一つで、数値や日付・時刻や文字列などの値に対して書式を設定し、文字列として取得します。ここでは Excel VBA における Format 関数の使い方について解説します。
(Last modified: )
Format関数の定義と使い方
Format
関数は引数に指定した数値や日付の値に書式を設定し文字列として返します。
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
実行結果は次のようになります。
12345 12345.678 \12,345 \12,346 12345.00 12345.68 12,345.00 12,345.68
"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
実行結果は次のようになります。
12.35% 1.23E-01 1.00E+06
"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
実行結果は次のようになります。
No Yes False True Off On
"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
実行結果は次のようになります。
001 012 123 1234 001.20 001.26
#を使った桁のプレースホルダー
"#" は桁に数値があればその数値を表示し、なければ何も表示しません。小数点以下の書式を設定する場合は "." と組み合わせて設定します。小数部の書式の # の桁数よりも、実際の数値の桁数が多い場合は、小数部の # の桁数のところで四捨五入されます。
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
実行結果は次のようになります。
1 1. 1.2 .2 1.24
注意点として 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
実行結果は次のようになります。
0.23 0
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
実行結果は次のようになります。
0,012 1,234 1,234,567 12 1,234 1,234,567
パーセンテージでの表示
"#" や "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
実行結果は次のようになります。
34.50% 34.57% 34.5% 34.57%
指数形式での表示
"#" や "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
実行結果は次のようになります。
3.46E-01 3.46E+03 345.7E-3 345.7E+1 345.7E-3 345.7E1
任意の文字列を追加して表示する場合
書式の中で文字列を追加で表示する場合、"-", "+", "$", "(" , ")" , " "の文字についてはそのまま記述できます。これ以外の文字の場合は文字の前に "\" を付けるか二重引用符で囲って記述します。二重引用符は 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
実行結果は次のようになります。
$1,500 \1,500 1,500エン 1,500ドル
特定の文字を除いて文字列を表示する場合は 1 文字毎に "\" を付けるか、二重引用符で囲ってまとめて記述します。
日付と時刻に対する書式設定
日付と時刻に対する書式の使い方です。あらかじめ用意されている名前付き日付/時刻書式を指定したり、または用意されている記号を組み合わせて自分で書式を定義することができます。
名前付き日付/時刻書式の種類
名前付き日付/時刻書式には次のようなものが用意されています。
書式名 | 説明 |
---|---|
General Date | 日付と時刻のどちらか、または両方を表示します。日付表示はシステム設定に依存します |
Long Date | システムの長い日付形式の書式に従って日付を表示します |
Medium Date | ホスト アプリケーションの言語バージョンで適切な、中間の長さの日付書式を使用して日付を表示します |
Short Date | システムの短い日付書式を使用して日付を表示します |
Long Time | システムの長い時間形式を使用して時間を表示します。時間、分、秒が含まれます |
Medium Time | 時間と分を、12 時間の書式と AM/PM を使用して表示します |
Short Time | 24 時間の形式を使用して時間を表示します |
名前付き日付/時刻書式を使用する場合は 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
実行結果は次のようになります。
2015/08/24 16:34:17 2015年8月24日 15-08-24 2015/08/24 16:34:17 04:34 午後 16:34
名前付き日付/時刻書式を使う場合は、実行されている環境によっても結果は異なってくるかと思います。
ユーザー定義日付/時刻書式の種類
ユーザー定義日付/時刻書式には次のようなものが用意されています。
文字 | 説明 |
---|---|
: | 時刻の区切り文字 |
/ | 日付の区切り文字 |
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/PM | 12 時間形式を使用し、午前に AM 午後に PM を表示します |
am/pm | 12 時間形式を使用し、午前に am 午後に pm を表示します |
A/P | 12 時間形式を使用し、午前に A 午後に P を表示します |
a/p | 12 時間形式を使用し、午前に a 午後に p を表示します |
AMPM | 12 時間形式を使用し、午前に "午前" 午後に "午後" を表示します |
ユーザー定義数値書式を使用する場合は 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
実行結果は次のようになります。
23/02/25 2023/02/25 February 25, 2023 2023年2月25日 2023/02/25(Sat) 2023/02/25(土曜日) 令和5年2月25日
数値の場合と異なり書式の中に文字列を追加したい場合はそのまま記述して大丈夫です。
時刻に関する書式
時刻に関する書式を組み合わせた例です。
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
実行結果は次のようになります。
19:05:23 7時5分 PM 7:05:23 午後
文字列に対する書式設定
文字列に対する書式の使い方です。用意されている記号を組み合わせて自分で書式を定義することができます。
ユーザー定義文字列書式の種類
ユーザー定義文字列書式には次のようなものが用意されています。
文字 | 説明 |
---|---|
@ | 文字があれば文字を表示し、なければスペースを表示します |
& | 文字があれば文字を表示し、なければ何も表示しません |
< | すべての文字を小文字にします |
> | すべての文字を大文字にします |
! | プレースホルダーを左から右に向かって埋めるように強制的に設定します(既定は右から左です) |
ユーザー定義文字列書式を使用する場合は 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
実行結果は次のようになります。
Red Yellow Blue red RED
書式の文字に "@" を使う記述すると、その桁に文字があれば文字を、なければ代わりに空白を表示します。同じ書式を複数の文字列に適用することで、右揃えの形で表示させることができます。
大文字や小文字には変換する場合はすべての文字が対象になる点にご注意ください。一部の文字だけを対象とすることはできません。
複数の書式をまとめて記述し値によって適用する書式を変える
複数の書式をまとめて記述し、値によってそれぞれ異なる書式を適用させることができます。
数値に対する書式設定の場合
数値に対する書式の設定では最大で 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,234 (1,234) ZERO
今回は 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
実行結果は次のようになります。
東京都 (None)
今回は 2 つの書式を記述していますので、対象の値が空文字または Null の場合と、そうではない場合で適用される書式が異なります。
-- --
Excel VBA における Format 関数の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。