VBAでセルに値を入力しても、表示形式が整っていないと「日付のはずが数値のまま」「金額にカンマが付かない」といった見た目の崩れが起きてしまいます。この記事では、セルの表示形式をVBAから自在に設定できるNumberFormatプロパティの使い方を、日付・通貨・パーセント・桁区切りなど代表的なパターンとともに解説します。マクロで生成した表を、手作業で整形し直す必要がなくなります。
NumberFormatプロパティの基本
NumberFormatプロパティは、セルの表示形式を文字列(書式コード)で指定・取得できるプロパティです。基本の書き方は以下の通りです。
Sub SetBasicNumberFormat()
' A1セルを桁区切りカンマ付きの数値にする
Range("A1").NumberFormat = "#,##0"
' B1セルを日付形式(2026/08/31)にする
Range("B1").NumberFormat = "yyyy/mm/dd"
' C1セルをパーセント表示(小数点1桁)にする
Range("C1").NumberFormat = "0.0%"
End Sub
NumberFormatは表示上の見た目を変えるだけで、セルに入っている実際の値(数値や日付のシリアル値)は変わりません。そのため、計算や比較には影響を与えずに見た目だけを整えられるのが大きなメリットです。
よく使う書式コード一覧
実務でよく使う書式コードをまとめました。まずはこの一覧から必要なものを選んで使ってみてください。
| 用途 | 書式コード | 表示例 |
|---|---|---|
| 桁区切りの整数 | #,##0 |
1,234,567 |
| 桁区切り+小数点2桁 | #,##0.00 |
1,234,567.89 |
| 通貨(円マーク付き) | ¥#,##0 |
¥1,234,567 |
| パーセント | 0.0% |
12.5% |
| 日付(スラッシュ区切り) | yyyy/mm/dd |
2026/08/31 |
| 日付(曜日付き) | yyyy/mm/dd(aaa) |
2026/08/31(月) |
| 時刻 | hh:mm:ss |
09:05:30 |
| 郵便番号 | 000-0000 |
123-4567 |
| 文字列扱い(先頭ゼロを保持) | @ |
0123 |
実践例:新しく追加した列に一括で表示形式を設定する
CSVなどから読み込んだ直後のデータは、すべて標準の表示形式になっていることが多いです。マクロでデータを整形したあとに、対象範囲へまとめて表示形式を設定する処理を組み込んでおくと便利です。
Sub FormatImportedData()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
With Worksheets("Sheet1")
.Range("A2:A" & lastRow).NumberFormat = "yyyy/mm/dd" ' A列:日付
.Range("B2:B" & lastRow).NumberFormat = "#,##0" ' B列:数量
.Range("C2:C" & lastRow).NumberFormat = "¥#,##0" ' C列:金額
.Range("D2:D" & lastRow).NumberFormat = "0.0%" ' D列:達成率
End With
MsgBox "表示形式の設定が完了しました。"
End Sub
列ごとに用途が決まっている表であれば、このように一括でNumberFormatを設定してしまうのが効率的です。行数が変動する場合でも、End(xlUp)で最終行を取得してから範囲指定すれば、常にデータのある範囲だけに正しく適用できます。
プラス・マイナス・ゼロで表示を変える
書式コードはセミコロン;で区切ることで、「正の数;負の数;ゼロ」ごとに異なる表示形式を指定できます。マイナスの値だけ赤字にしたい場合などによく使われます。
Sub SetConditionalNumberFormat()
' 正の数は黒、負の数は赤でマイナス表示、ゼロは "-" で表示
Range("E2:E100").NumberFormat = "#,##0;[赤]-#,##0;""-"""
End Sub
この例では、正の数は通常表示、負の数は赤字でマイナス記号付き、ゼロの場合は"-"という文字が表示されます。売上と経費が混在する集計表などで、マイナス値を視覚的にひと目で分かるようにしたいときに活用できます。
NumberFormatとNumberFormatLocalの違い
和暦(令和・平成など)を表示したい場合は、NumberFormatではなくNumberFormatLocalプロパティを使う必要があります。NumberFormatは英語圏の書式コード体系で処理されるため、日本語Excel固有の元号記号(gggやe)を正しく認識できないことがあるためです。
Sub SetJapaneseEraFormat()
' 和暦(令和8年8月31日)で表示する
Range("F1").NumberFormatLocal = "ggge""年""m""月""d""日"""
End Sub
通常の桁区切りや日付形式であればNumberFormatで問題ありませんが、和暦表示のような日本語Excel固有の書式を扱うときはNumberFormatLocalを使うと覚えておくとよいでしょう。
現在の表示形式を取得する
既存の表示形式を確認したり、一時的に変更してあとで元に戻したりしたい場合は、NumberFormatから現在の値を取得できます。
Sub ShowCurrentFormat()
Dim originalFormat As String
originalFormat = Range("A1").NumberFormat
Range("A1").NumberFormat = "0.00%"
' ここで何らかの処理を行う
Range("A1").NumberFormat = originalFormat ' 元の表示形式に戻す
End Sub
このように一度変数へ退避してから処理を行うことで、他のマクロや手動設定に影響を与えずに、一時的な表示形式の変更を安全に行えます。
まとめ
NumberFormatプロパティを使えば、桁区切り・通貨・パーセント・日付といった表示形式をVBAから自由自在にコントロールできます。値そのものは変えずに見た目だけを整えられるため、集計マクロの仕上げとして組み込んでおくと、手作業での書式設定が不要になります。和暦表示など日本語Excel固有の書式が必要な場合はNumberFormatLocalを使う点も、あわせて覚えておいてください。


コメント