Excel VBA 逆引き集 | 数字の3桁区切り

Excel VBA
スポンサーリンク

数字の3桁区切り

「見た目だけカンマ付け」「値はそのまま」「文字列として成形」「通貨・小数・負数赤」まで、初心者でも迷わず使える安全テンプレートをまとめます。基本は表示形式の指定(NumberFormat/NumberFormatLocal)か、Format関数で文字列化です。


基本:表示形式でカンマ区切りにする(値は数値のまま)

Sub FormatThousands_Basic()
    '整数の3桁区切り(例: 1234567 → 1,234,567)
    Range("E3:E20").NumberFormat = "#,##0"

    '小数あり(2桁表示:例 1234.5 → 1,234.50)
    Range("F3:F20").NumberFormat = "#,##0.00"
End Sub
VB
  • ポイント: NumberFormatは「見た目」を変えるだけで、値は数値のまま。計算に使えるので最も安全です。

日本語環境向けの表示形式(円・負数赤・ゼロ表記)

Sub FormatThousands_Japanese()
    '末尾「円」表記(例: 1234567 → 1,234,567円)
    Range("G3:G20").NumberFormatLocal = "#,##0円"

    '負数は赤、ゼロはハイフン(会計風)
    Range("H3:H20").NumberFormatLocal = "#,##0;[赤]-#,##0;""-"""
End Sub
VB
  • ポイント: セミコロンで「正数;負数;ゼロ;文字列」を指定。日本語環境なら NumberFormatLocal が直感的です。

文字列として成形する(セルに文字列を書き込む)

Sub FormatThousands_AsText()
    'Format関数で文字列へ(例: "1234567" → "1,234,567")
    Range("B2").Value = Format(1234567, "#,##0")

    'セルの値を文字列にして書き戻し(表示は固定文字列になる)
    Dim v As Variant
    v = Range("C2").Value
    Range("C3").Value = Format(v, "#,##0.00")
End Sub
VB
  • ポイント: 文字列にすると見た目は揃うが「数値ではなくなる」ため計算に使いづらい。提出用の固定表示に向いています。

数式でテキスト化(TEXT関数を一括適用)

Sub FormatThousands_WithTextFormula()
    'D列の数値を、E列に文字列としてカンマ表示で出力
    Dim last As Long
    last = Cells(Rows.Count, "D").End(xlUp).Row
    Range("E3:E" & last).FormulaR1C1 = "=TEXT(RC[-1],""#,##0"")"
End Sub
VB
  • ポイント: TEXTは「文字列を返す」ため、表示固定に便利。計算は元の列で行い、出力列は見た目用にする構成がおすすめ。

列・表に一括適用(動的最終行)

Sub ApplyThousandsToColumn()
    Dim last As Long
    last = Cells(Rows.Count, "E").End(xlUp).Row
    Range("E3:E" & last).NumberFormat = "#,##0"
End Sub
VB
  • ポイント: 最終行を基準列から取得して、意図した範囲にだけ適用します。

値と書式を“見た目のまま”コピー(提出用作成)

Sub CopyValuesWithNumberFormats()
    Dim src As Range, dst As Range
    Set src = Range("B3:E20")
    Set dst = Range("H3").Resize(src.Rows.Count, src.Columns.Count)

    src.Copy
    dst.PasteSpecial Paste:=xlPasteValuesAndNumberFormats '値+数値表示形式
    Application.CutCopyMode = False
End Sub
VB
  • ポイント: 値と「数値の表示形式」だけをまとめて貼れる。色・罫線なども移すならFormatsやColumnWidthsを合わせて貼ります。

よく使うバリエーション(テンプレート集)

Sub ThousandVariants()
    '整数(ゼロも表示):#,##0
    Range("A1").NumberFormat = "#,##0"

    '小数2桁:#,##0.00
    Range("A2").NumberFormat = "#,##0.00"

    '千区切り+円マーク(通貨記号表示)
    Range("A3").NumberFormat = "[$-411]#,##0"  '環境により通貨記号を使用

    '負数括弧・ゼロハイフン(会計風)
    Range("A4").NumberFormat = "#,##0;(#,##0);-"
End Sub
VB
  • ポイント: 会計ルールに合わせて「負数を括弧」「ゼロをハイフン」など柔軟に指定可能。

例題で練習

例題1:金額列(E列)を3桁区切り、小数なしで一括設定

Sub Example_FormatAmountColumn()
    Dim last As Long
    last = Cells(Rows.Count, "E").End(xlUp).Row
    Range("E3:E" & last).NumberFormat = "#,##0"
End Sub
VB

例題2:単価列(F列)を3桁区切り+小数2桁、負数は赤

Sub Example_FormatUnitPrice()
    Dim last As Long
    last = Cells(Rows.Count, "F").End(xlUp).Row
    Range("F3:F" & last).NumberFormatLocal = "#,##0.00;[赤]-#,##0.00"
End Sub
VB

例題3:提出用の「文字列カンマ表示」を別列に出力

Sub Example_OutputAsText()
    Dim last As Long
    last = Cells(Rows.Count, "E").End(xlUp).Row
    Range("G3:G" & last).FormulaR1C1 = "=TEXT(RC[-2],""#,##0"")"
End Sub
VB

実務の落とし穴と対策

  • 計算できない文字列化: FormatやTEXTで文字列にすると計算に使えない。社内の分析用はNumberFormatで「見た目だけ」変える。提出用は文字列でもOK。
  • 貼り付けで書式が消える: 値だけ貼ると書式は消える。値+表示形式を一緒に貼るか、後からNumberFormatを再適用。
  • 負数・ゼロの表現差: 会計ルールに合わせて「赤」「括弧」「ハイフン」などをセミコロン構文で指定する。
  • 大量範囲の速度: Application.ScreenUpdating=False を併用し、範囲はUsedRangeやCurrentRegion、最終行取得で絞る。
タイトルとURLをコピーしました