数字の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、最終行取得で絞る。
