Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - NumberFormat

Excel VBA VBA
スポンサーリンク

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
VB

C1 は「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"    ' 整数、カンマあり
VB

0 は「必ず数字を表示」
# は「不要なゼロは表示しない」
という違いがありますが、超初心者のうちは「#,##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 は“見せ方”
中身は変えずに、小数桁数・カンマ・通貨記号・日付形式などを変えられる
書式文字列は、セルの書式設定ダイアログの“ユーザー定義”と同じルール
「中身を変えたいのか、見た目だけ変えたいのか」を毎回意識して使い分ける

タイトルとURLをコピーしました