目次

目的

  • 数字を三桁区切りで出力する。
  • 桁数を揃える。
  • ハイフンで区切る。
  • Format 関数を使用する。

目次まで戻る

その一例

  1. 下記マクロを実行してみます。
    Sub Format関数で数字を三桁区切りにする()
    Debug.Print Format(1000, "0,0")
    End Sub
    1. VBE のイミディエイトウィンドウへの出力結果です。
      3 桁区切りになっている。
      3 桁区切りになっている。
    2. Format(1000, "0,0")
      • Format( 元の値 , ユーザーが定義する書式 ) の書式になっています。
    3. "0,0"
      • 「0」はプレースホルダー(place holder)というものらしいです。プログラミング用語では、後で値を入力できる箇所をプレースホルダーというらしいです。ワイルドカード *,* の逆向きのようなものでしょうか。
      • プレースホルダーはそのまま出力されるのではなく、元の値を整形するための条件として解釈されるようです。
      • 「0」は数字用のプレースホルダーのようで、元の値が数字の場合に機能を発揮するようです。
      • プレースホルダーとして使用可能な文字はプログラミング言語、関数の仕様で独自に決まっているようです。
      • 参考資料
      • 「,」カンマも数字用のプレースホルダーらしいです。カンマが出力されるかどうかは数字の桁数によって決まるようです。カンマが入る事を仮に決めています。
    4. 「0」「,」は数字用のプレースホルダーなので数字以外の値が入ってきた場合は三桁区切りにならないようです。
      "AAAA" 数字以外の値を入れてみます。
      "AAAA" 数字以外の値を入れてみます。
      三桁区切りになっていない。
      三桁区切りになっていない。
  2. 元の数字を変更して更にテストしてみます。
    Sub 数字変更_Format関数で数字を三桁区切りにする()
    Debug.Print Format(1, "0,0")
    Debug.Print Format(10, "0,0")
    Debug.Print Format(1000000, "0,0")
    End Sub
    1. 出力結果は以下のようになりました。1 が「01」と出力されてしまっています。プレースホルダーの「0」はそこに数字がない場合、「0」で埋めて出力する機能を持っているようです。
      01 になってしまっている。
      01 になってしまっている。
  3. 同じく数値系のプレースホルダーの「#」シャープを試してみます。
    Sub シャープ使用_Format関数で数字を三桁区切りにする()
      Debug.Print Format(1, "#,#")
      Debug.Print Format(10, "#,#")
      Debug.Print Format(1000000, "#,#")
    End Sub
    1. 出力結果は以下のようになりました。プレースホルダーの「#」は「0」で埋める機能がないようです。
      1 になっている。0 が付いていません。
      1 になっている。0 が付いていません。
  4. 小数点が入った数字でテストしてみます。
    Sub 小数点_シャープ使用_Format関数で数字を三桁区切りにする()
    Debug.Print Format(1234.567, "#,#")
    End Sub
    1. 出力結果は以下のようになりました。
      1235 に丸められている。
      1235 に丸められている。
  5. 小数点以下二桁まで出力してみます。
    Sub 小数点以下二桁まで出力()
    Debug.Print Format(1234.567, "#,#.##")
    End Sub
    1. "#,#.##"
      「.##」を追加しました。「.」ピリオドの後の「#」の数で桁数を調整できます。「#」二つで二桁を指定しています。
    2. 出力結果は以下のようになりました。
      小数点以下二桁まで出力されている。 .57 に丸められている。
      小数点以下二桁まで出力されている。 .57 に丸められている。
  6. プレースホルダー「0」の「0」で埋める機能を利用して、小数点以下の桁数を揃えてみます。
    Sub プレースホルダー0の機能を使用して小数点以下の桁数を揃える()  
    Debug.Print Format(1, "#,#.00")
    Debug.Print Format(1234.5, "#,#.00")
    Debug.Print Format(1234.567, "#,#.00")
    End Sub
    1. 出力結果は以下のようになりました。
      桁数が揃っている。
      桁数が揃っている。
  7. 「0000」として整数部分の桁数を揃えてみます。
    Sub プレースホルダー0の機能を使用して整数部分の桁数を揃える()
    Debug.Print Format(1, "0000")
    Debug.Print Format(2, "0000")
    Debug.Print Format(999, "0000")
    End Sub
    1. 出力結果は以下のようになりました。
      数字がない桁は 0 が出力されている。
      数字がない桁は 0 が出力されている。
  8. 「000-0000」としてハイフン区切りで出力してみます。
    Sub ハイフン区切りで出力()
    Debug.Print Format(123, "000-0000")
    Debug.Print Format(1230123, "000-0000")
    Debug.Print Format(1234567, "000-0000")
    End Sub
    1. 出力結果は以下のようになりました。
      ハイフン区切りになっている。
      ハイフン区切りになっている。
  9. ¥ 円記号を付けて出力してみます。
    Sub 円記号を付けて出力する()
    Debug.Print Format(1234, "¥¥#,#")
    End Sub
    1. "¥¥#,#"
      「¥」の後に「¥」を記述しています。「¥」の後の文字はそのまま出力されるようです。その後に「#,#」と記述して数字を整形しています。
    2. 出力結果は以下のようになりました。
      ¥ が出力されている。
      ¥ が出力されている。
    3. 上記マクロの「"¥¥#,#"」の部分を「"¥#,#"」とすると以下の結果になりました。「¥」を一つだけにしたので「¥」は出力されませんでした。
      「¥」は出力されず、「¥」の後の 「#」がそのまま出力されました。「,」カンマも出力されています。
      「¥」は出力されず、「¥」の後の 「#」がそのまま出力されました。「,」カンマも出力されています。

目次まで戻る

名前付き数値書式

Format 関数で事前に定義されている「名前付き数値書式」というものを使用してみます。VBA の定数のようにキーワードのまま使用できるようです。下記ヘルプページに一覧が載っていると思います。

参考資料

  1. 名前付き数値書式の「Yes/No」を使用しています。
    Sub 名前付き数値書式_YesNo()
    Debug.Print Format(0, "Yes/No") '「0」は「No」を表示
    Debug.Print Format(1, "Yes/No") '「1」は「Yes」を表示
    End Sub
    1. 出力結果は以下のようになりました。
      No
Yes
      No
      Yes
  2. 「True/False」を使用してみます。
    Sub 名前付き数値書式_TrueFalse()
    Debug.Print Format(0, "True/False") '「0」は「False」を表示
    Debug.Print Format(1, "True/False") '「1」は「True」を表示
    End Sub
    1. 出力結果は以下のようになりました。
      False
True
      False
      True
  3. 「On/Off」を使用してみます。
    Sub 名前付き数値書式_OnOff()
    Debug.Print Format(0, "On/Off") '「0」は「Off」を表示
    Debug.Print Format(1, "On/Off") '「1」は「On」を表示
    End Sub
    1. 出力結果は以下のようになりました。
      Off
On
      Off
      On

名前付き数値書式ではなくユーザーが定義する書式でも同じような事ができます。

  1. 下記マクロを実行してみます。
    Sub 元の値が正の値_負の値_0の場合で出力を分岐する()
    Debug.Print Format(1, "¥正;¥負;¥ゼ¥ロ")
    Debug.Print Format(-1, "¥正;¥負;¥ゼ¥ロ")
    Debug.Print Format(0, "¥正;¥負;¥ゼ¥ロ")
    End Sub
    1. 出力結果は以下のようになりました。
      正
負
ゼロ


      ゼロ
    2. 「"¥正;¥負;¥ゼ¥ロ"」
      • セミコロン「;」はセクションの区切りになっています。
      • 「第 1 セクション;第 2 セクション;第 3 セクション」の 3 つのセクションを使用しています。
      • セクションを 3 つ使用した場合、
        元の値が「正」の値だと、第 1 セクションの書式で出力されます。
        元の値が「負」の値だと、第 2 セクションの書式で出力されます。
        元の値が「0」だと、第 3 セクションの書式で出力されます。
    3. 「¥」
      • 円記号の後の文字はそのまま出力されます。
      • 「ゼロ」は一文字ずつ「¥ゼ」「¥ロ」と記述しています。
  2. 元の値が数字の場合、最大 4 つのセクションを使用できるようです。第 4 セクションは Null 値に適用されるようです。
    Sub 第4セクションまで使用()
    Debug.Print Format(Null, "¥正;¥負;¥ゼ¥ロ;¥ヌ¥ル")
    End Sub
    1. 出力結果は以下のようになりました。
      Null はヌルと出力されている。
      Null はヌルと出力されている。
      コードに入力した Null 値。
      コードに入力した Null 値。

マクロストック

Sub Format関数で出力すると先頭にスペースが付かない()
Debug.Print """" & Str(1) & """"
Debug.Print """" & CStr(1) & """"
Debug.Print """" & Format(1) & """"
End Sub
スペースが付いていない。
スペースが付いていない。

Str 関数の先頭のスペースについて下記ページに記載がありました。

数字がマイナスの場合、「-」が入るスペースが必要なので、事前にスペースが確保されているようです。数字がプラスの場合、「+」の符号を出力しないのでスペースが空くようです。

Sub Str関数でマイナスとプラスの数字を文字列に変換()
  Debug.Print """" & Str(-1) & """"
  Debug.Print """" & Str(0) & """"
  Debug.Print """" & Str(1) & """"
End Sub
マイナスの符号「-」が入るスペースが確保されている。
マイナスの符号「-」が入るスペースが確保されている。

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿