目次
目的
- 数字を三桁区切りで出力する。
- 桁数を揃える。
- ハイフンで区切る。
- Format 関数を使用する。
その一例
- 下記マクロを実行してみます。
Sub Format関数で数字を三桁区切りにする()
Debug.Print Format(1000, "0,0")
End Sub- VBE のイミディエイトウィンドウへの出力結果です。
3 桁区切りになっている。 - Format(1000, "0,0")
- Format( 元の値 , ユーザーが定義する書式 ) の書式になっています。
- "0,0"
- 「0」はプレースホルダー(place holder)というものらしいです。プログラミング用語では、後で値を入力できる箇所をプレースホルダーというらしいです。ワイルドカード *,* の逆向きのようなものでしょうか。
- プレースホルダーはそのまま出力されるのではなく、元の値を整形するための条件として解釈されるようです。
- 「0」は数字用のプレースホルダーのようで、元の値が数字の場合に機能を発揮するようです。
- プレースホルダーとして使用可能な文字はプログラミング言語、関数の仕様で独自に決まっているようです。
- 参考資料
- Format 関数 (Visual Basic for Applications) | Microsoft Learn
- https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/format-function-visual-basic-for-applications#user-defined-numeric-formats
- 「,」カンマも数字用のプレースホルダーらしいです。カンマが出力されるかどうかは数字の桁数によって決まるようです。カンマが入る事を仮に決めています。
- 「0」「,」は数字用のプレースホルダーなので数字以外の値が入ってきた場合は三桁区切りにならないようです。
"AAAA" 数字以外の値を入れてみます。 三桁区切りになっていない。
- VBE のイミディエイトウィンドウへの出力結果です。
- 元の数字を変更して更にテストしてみます。
Sub 数字変更_Format関数で数字を三桁区切りにする()
Debug.Print Format(1, "0,0")
Debug.Print Format(10, "0,0")
Debug.Print Format(1000000, "0,0")
End Sub - 同じく数値系のプレースホルダーの「#」シャープを試してみます。
Sub シャープ使用_Format関数で数字を三桁区切りにする()
Debug.Print Format(1, "#,#")
Debug.Print Format(10, "#,#")
Debug.Print Format(1000000, "#,#")
End Sub - 小数点が入った数字でテストしてみます。
Sub 小数点_シャープ使用_Format関数で数字を三桁区切りにする()
Debug.Print Format(1234.567, "#,#")
End Sub - 小数点以下二桁まで出力してみます。
Sub 小数点以下二桁まで出力()
Debug.Print Format(1234.567, "#,#.##")
End Sub - プレースホルダー「0」の「0」で埋める機能を利用して、小数点以下の桁数を揃えてみます。
Sub プレースホルダー0の機能を使用して小数点以下の桁数を揃える()
Debug.Print Format(1, "#,#.00")
Debug.Print Format(1234.5, "#,#.00")
Debug.Print Format(1234.567, "#,#.00")
End Sub - 「0000」として整数部分の桁数を揃えてみます。
Sub プレースホルダー0の機能を使用して整数部分の桁数を揃える()
Debug.Print Format(1, "0000")
Debug.Print Format(2, "0000")
Debug.Print Format(999, "0000")
End Sub - 「000-0000」としてハイフン区切りで出力してみます。
Sub ハイフン区切りで出力()
Debug.Print Format(123, "000-0000")
Debug.Print Format(1230123, "000-0000")
Debug.Print Format(1234567, "000-0000")
End Sub - ¥ 円記号を付けて出力してみます。
Sub 円記号を付けて出力する()
Debug.Print Format(1234, "¥¥#,#")
End Sub
名前付き数値書式
Format 関数で事前に定義されている「名前付き数値書式」というものを使用してみます。「Yes/No」「True/False」「On/Off」のキーワードを Fromat 関数の書式として指定すると、事前に定義されている書式で結果が返ってくるようです。下記ヘルプページに一覧が載っていると思います。
参考資料
- Format 関数 (Visual Basic for Applications) | Microsoft Learn
- https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/format-function-visual-basic-for-applications#named-numeric-formats
- 名前付き数値書式の「Yes/No」を使用しています。
Sub 名前付き数値書式_YesNo()
Debug.Print Format(0, "Yes/No") '「0」は「No」を表示
Debug.Print Format(1, "Yes/No") '「1」は「Yes」を表示
End Sub - 「True/False」を使用してみます。
Sub 名前付き数値書式_TrueFalse()
Debug.Print Format(0, "True/False") '「0」は「False」を表示
Debug.Print Format(1, "True/False") '「1」は「True」を表示
End Sub - 「On/Off」を使用してみます。
Sub 名前付き数値書式_OnOff()
Debug.Print Format(0, "On/Off") '「0」は「Off」を表示
Debug.Print Format(1, "On/Off") '「1」は「On」を表示
End Sub
名前付き数値書式ではなくユーザーが定義する書式でも同じような事ができます。
- 下記マクロを実行してみます。
Sub 元の値が正の値_負の値_0の場合で出力を分岐する()
Debug.Print Format(1, "¥正;¥負;¥ゼ¥ロ")
Debug.Print Format(-1, "¥正;¥負;¥ゼ¥ロ")
Debug.Print Format(0, "¥正;¥負;¥ゼ¥ロ")
End Sub - 元の値が数字の場合、最大 4 つのセクションを使用できるようです。第 4 セクションは Null 値に適用されるようです。
Sub 第4セクションまで使用()
Debug.Print Format(Null, "¥正;¥負;¥ゼ¥ロ;¥ヌ¥ル")
End Sub
マクロストック
Sub Format関数で出力すると先頭にスペースが付かない()
Debug.Print """" & Str(1) & """"
Debug.Print """" & CStr(1) & """"
Debug.Print """" & Format(1) & """"
End Sub

Str 関数の先頭のスペースについて下記ページに記載がありました。
- Str 関数 (Visual Basic for Applications) | Microsoft Learn
- https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/str-function
数字がマイナスの場合、「-」が入るスペースが必要なので、事前にスペースが確保されているようです。数字がプラスの場合、「+」の符号を出力しないのでスペースが空くようです。
Sub Str関数でマイナスとプラスの数字を文字列に変換()
Debug.Print """" & Str(-1) & """"
Debug.Print """" & Str(0) & """"
Debug.Print """" & Str(1) & """"
End Sub

テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
以上、閲覧ありがとうございました。