VBAでセルの値に応じて表示形式を自動で変える方法|NumberFormat・Font.Color・Worksheet_Change

VBAでセルの表示形式を自動変更するには、NumberFormat プロパティと条件分岐を組み合わせるだけで実現できます。数値・日付・パーセントなどの書式統一から、マイナス値の赤字化まで、入力内容に応じて自動で見た目を整える仕組みを作れます。

この記事では、次の内容を順番に解説します。

  • NumberFormatの基本とよく使う書式文字列
  • 値の種類(数値・日付・文字列)に応じて書式を切り替える方法
  • 条件によって色・太字・斜体を変える方法
  • 入力と同時に書式が変わる自動化パターン

NumberFormatで表示形式を変えるには?

NumberFormat プロパティにExcelの書式文字列を代入すると、セルの表示形式を変更できます。Excelの「セルの書式設定」ダイアログで確認できる書式コードをそのまま使えます。

目的NumberFormatの値表示例
カンマ区切り(整数)"#,##0"1,234,567
カンマ区切り(小数2桁)"#,##0.00"1,234,567.89
パーセント表示"0.0%"12.3%
日付(スラッシュ区切り)"yyyy/mm/dd"2026/04/16
日付(日本語表示)"yyyy年m月d日"2026年4月16日
円マーク付き"¥#,##0"¥1,234,567
標準(書式なし)"General"入力値そのまま

値の種類に応じて書式を自動で切り替えるには?

セルの値が日付・数値・文字列のどれかを IsDateIsNumeric で判定し、それぞれに適した書式を設定します。

Sub FormatByValueType()

    Dim ws  As Worksheet
    Dim i   As Long
    Dim val As Variant

    Set ws = ActiveSheet

    For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        val = ws.Cells(i, 1).Value

        If IsDate(val) Then
            '日付ならyyyy/mm/dd形式に
            ws.Cells(i, 1).NumberFormat = "yyyy/mm/dd"

        ElseIf IsNumeric(val) Then
            '数値ならカンマ区切りに
            ws.Cells(i, 1).NumberFormat = "#,##0"

        Else
            '文字列や空欄は標準に戻す
            ws.Cells(i, 1).NumberFormat = "General"
        End If

    Next i

    MsgBox "表示形式を自動で変更しました。"

End Sub

条件に応じてフォント色や書式を変えるには?

数値のプラス・マイナスや特定のしきい値を超えたかどうかに応じて、フォント色・太字・背景色を変えることができます。

マイナス値を赤字にする例:

Sub FormatBySign()

    Dim ws As Worksheet
    Dim i  As Long
    Dim v  As Variant

    Set ws = ActiveSheet

    For i = 2 To ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
        v = ws.Cells(i, 2).Value

        If Not IsNumeric(v) Then GoTo NextRow

        With ws.Cells(i, 2)
            .NumberFormat = "#,##0"

            If CDbl(v) < 0 Then
                .Font.Color = RGB(255, 0, 0)   '赤
                .Font.Bold  = True
            Else
                .Font.Color = RGB(0, 0, 0)     '黒
                .Font.Bold  = False
            End If
        End With

NextRow:
    Next i

    MsgBox "書式の変更が完了しました。"

End Sub

フォント色・背景色・太字・斜体などを変えるプロパティは次のとおりです。

プロパティ内容
Font.Color文字色(RGB値)RGB(255, 0, 0) → 赤
Font.Bold太字(True/False)True で太字
Font.Italic斜体(True/False)True で斜体
Interior.Colorセルの背景色(RGB値)RGB(255, 255, 0) → 黄色
Interior.ColorIndex背景色(カラーインデックス番号)xlNone で塗りつぶしなし

入力と同時に書式を変えるには?

Worksheet_Change イベントと組み合わせると、セルに値を入力した瞬間に書式が自動で変わります。シートモジュールに記述します。

'シートモジュール(Sheet1など)に記述する
Private Sub Worksheet_Change(ByVal Target As Range)

    'B列への入力だけを対象にする
    If Not Intersect(Target, Range("B:B")) Is Nothing Then

        Application.EnableEvents = False

        Dim v As Variant
        v = Target.Value

        If IsNumeric(v) And v <> "" Then
            With Target
                .NumberFormat = "#,##0"
                If CDbl(v) < 0 Then
                    .Font.Color = RGB(255, 0, 0)
                Else
                    .Font.Color = RGB(0, 0, 0)
                End If
            End With
        End If

        Application.EnableEvents = True

    End If

End Sub

まとめ

  • NumberFormat プロパティに書式文字列を代入するだけで表示形式を変更できる
  • IsDateIsNumeric で値の種類を判定し、ElseIfで書式を切り替えるのが基本パターン
  • Font.ColorFont.BoldInterior.Color で文字色・太字・背景色を条件に応じて変えられる
  • Worksheet_Change と組み合わせると、入力した瞬間に書式が自動で変わる仕組みになる
  • 書式変更マクロを使いたい範囲だけに絞ることで、不要な処理を省いてパフォーマンスを維持できる

よくある質問

NumberFormatの書式文字列はどこで調べればいいですか?

Excelの「セルの書式設定」ダイアログ(Ctrl+1)→「表示形式」タブ→「ユーザー定義」に表示されている書式コードをそのまま NumberFormat に使えます。目的の見た目を手動で設定してから確認すると、そのコードをVBAに転用できます。

書式を変えても値が変わってしまいます

NumberFormat は表示形式のみを変更し、セルの値そのものは変えません。ただし日付の場合、内部ではシリアル値(数値)として保存されているため、NumberFormat を変えると見え方が変わります。値を変えたい場合は .Value プロパティを使います。

条件付き書式(ホームタブ)との違いは何ですか?

Excelの条件付き書式は設定が画面で視覚的に確認でき、ルールの追加・変更も容易です。VBAの書式変更は、より複雑な条件や動的なデータに応じた柔軟な制御が必要な場合に向いています。シンプルな色分けなら条件付き書式で十分な場合が多く、複雑なロジックが必要なときにVBAを使うという使い分けがおすすめです。

背景色を元に戻すにはどう書きますか?

Interior.ColorIndex = xlNone または Interior.Color = xlNone で塗りつぶしなしに戻せます。Interior.ColorIndex = 0 は黒になるので注意してください。

複数のセル範囲にまとめて書式を適用するには?

Range("B2:B100").NumberFormat = "#,##0" のように範囲指定で一括適用できます。ループを使わなくても範囲全体に同じ書式を設定できるため、同じ書式を適用したい場合は範囲指定の方が効率的です。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール