NumberFormat は「セルの“表示のしかた”を決めるためのプロパティ」
まず一番大事なイメージから。
NumberFormat は「セルの中身そのもの」ではなく、「どう見せるか(表示形式)」を決めるプロパティです。
中身(Value)は変えずに、
「3.5 を “3.50” と表示する」
「4500 を “4,500円” と表示する」
「日付を “2026/03/25” や “3月25日(水)” と表示する」
こういう“見せ方のルール”を文字列で指定するのが NumberFormat です。
Value → 中身そのもの
NumberFormat → その中身の見せ方(表示形式)
この分離をちゃんと理解できると、一気に扱いやすくなります。
一番基本:NumberFormat で「小数・通貨・日付」の表示を変える
小数点以下の桁数をそろえる
Sub SampleNumberFormatDecimal()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Range("A1").Value = 3.5
ws.Range("A2").Value = 3
ws.Range("A1:A2").NumberFormat = "0.00"
End Sub
VBここでやっていることは、
A1 に 3.5、A2 に 3 を入れる
A1:A2 の NumberFormat を "0.00" にする
という流れです。
表示はこうなります。
A1 → 3.50
A2 → 3.00
重要なのは、
セルの中身(Value)は 3.5 と 3 のまま
NumberFormat だけを変えて、「小数第2位まで表示する」というルールを適用している
という点です。
通貨形式にする(カンマ区切り+円)
Sub SampleNumberFormatCurrency()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Range("B1").Value = 4500
ws.Range("B1").NumberFormat = "#,##0""円"""
End Sub
VB"#,##0""円""" という書式は、
千の位ごとにカンマ区切り
小数なし
最後に「円」という文字を付ける
という意味です。
ポイントは、
文字としての「円」を書式の中に入れるときは、"" で囲む必要があることです。
日付の表示形式を変える
Sub SampleNumberFormatDate()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Range("C1").Value = Date ' 今日の日付
ws.Range("C1").NumberFormat = "yyyy/mm/dd"
ws.Range("C2").Value = Date
ws.Range("C2").NumberFormat = "yyyy年m月d日"
End Sub
VBC1 は「2026/03/25」
C2 は「2026年3月25日」
のように表示されます(実際の日付は実行日によります)。
ここでも、中身(Value)は「日付型の値」で同じですが、
NumberFormat を変えることで「見せ方」だけを変えています。
「中身」と「見せ方」を絶対に混同しないことが超重要
Value は変わらない、変わるのは表示だけ
例えば、次のコードを見てください。
ws.Range("A1").Value = 3.14159
ws.Range("A1").NumberFormat = "0.00"
VB画面上は「3.14」と表示されますが、
セルの中身(Value)は 3.14159 のままです。
つまり、
計算に使われるのは 3.14159
見た目として表示されるのは 3.14
という状態です。
ここを勘違いして、
「NumberFormat で 2 桁にしたから、値も 2 桁に丸められた」と思ってしまうと危険です。
「値を丸めたい」のか
「表示だけ丸めて見せたい」のか
この違いを、毎回意識して選ぶ必要があります。
中身を丸めたいなら WorksheetFunction や Round を使う
少し先の話ですが、
「本当に値そのものを 2 桁にしたい」なら、NumberFormat ではなく Round などを使います。
ws.Range("A1").Value = WorksheetFunction.Round(ws.Range("A1").Value, 2)
VBこれは「中身を 2 桁に丸める」処理です。
NumberFormat はあくまで「見せ方」だけ、という線引きを忘れないでください。
よく使う NumberFormat のパターンをいくつか覚えておく
整数(カンマ区切りあり・なし)
ws.Range("A1").NumberFormat = "0" ' 整数、カンマなし
ws.Range("A2").NumberFormat = "#,##0" ' 整数、カンマあり
VB0 は「必ず数字を表示」# は「不要なゼロは表示しない」
という違いがありますが、超初心者のうちは「#,##0 でカンマ付き整数」と覚えておけば十分です。
小数(桁数固定)
ws.Range("B1").NumberFormat = "0.0" ' 小数1桁
ws.Range("B2").NumberFormat = "0.00" ' 小数2桁
ws.Range("B3").NumberFormat = "0.000" ' 小数3桁
VB「0 の数 = 小数点以下の桁数」と覚えてしまいましょう。
パーセント
ws.Range("C1").Value = 0.25
ws.Range("C1").NumberFormat = "0.0%"
VB中身が 0.25 でも、表示は「25.0%」になります。
ここでも、中身は 0.25 のままです。
日付・時刻
ws.Range("D1").NumberFormat = "yyyy/mm/dd"
ws.Range("D2").NumberFormat = "m/d"
ws.Range("D3").NumberFormat = "hh:mm"
ws.Range("D4").NumberFormat = "yyyy/mm/dd hh:mm"
VB日付や時刻は、
「y, m, d, h, m, s」などの組み合わせで表示形式を作ります。
NumberFormat を使うときに意識してほしい重要ポイント
「書式文字列は、セルの書式設定ダイアログの“ユーザー定義”と同じ」
NumberFormat に指定する文字列は、
Excel の「セルの書式設定 → 表示形式 → ユーザー定義」に出てくる書式と同じです。
つまり、
手でセルの書式をいじって、
「この表示形式いいな」と思ったら、
その書式コードをそのまま NumberFormat に書けばいい
ということです。
「VBA 用の特別な書き方」ではなく、
「Excel が元々持っている書式コード」をそのまま使っているだけ、と捉えてください。
まずは「中身を変えずに見た目だけ変える」という感覚を体に入れる
NumberFormat を触るときは、毎回こう自分に確認してほしいです。
「今やりたいのは、中身を変えること? それとも見た目だけ変えること?」
見た目だけ → NumberFormat
中身そのもの → Value に別の値を代入する(Round などを使う)
この切り替えが自然にできるようになると、
「表示は 3.14 なのに計算すると 3.14159 でズレる」といった混乱を避けられます。
まとめ:NumberFormat は「セルの中身をどう“見せるか”をデザインするためのプロパティ」
NumberFormat の本質は、
「Range に対して、その中身をどのような形式(数値・通貨・日付・パーセントなど)で表示するかを文字列で指定する」
ことです。
押さえておきたいポイントをコンパクトにまとめると、
Value は中身、NumberFormat は“見せ方”
中身は変えずに、小数桁数・カンマ・通貨記号・日付形式などを変えられる
書式文字列は、セルの書式設定ダイアログの“ユーザー定義”と同じルール
「中身を変えたいのか、見た目だけ変えたいのか」を毎回意識して使い分ける
