VBAで入力値に応じてフォントサイズ・太字・斜体を自動で変える方法

VBAで入力値に応じてフォントサイズや太字・斜体などのスタイルを変えるには、Font.SizeFont.Bold などのプロパティを使います。条件分岐と組み合わせることで、点数が高ければ大きな文字、「重要」と入力されたら太字など、セルの見た目を自動で変えられます。

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

  • 点数に応じてフォントサイズを変えるコード
  • 入力した文字列に応じてスタイルを変えるコード
  • セルに入力した直後に自動でスタイルを変える方法

点数に応じてフォントサイズを変えるには?

B列に入力された点数に応じて、フォントサイズを自動で変えるコードです。

Sub ChangeFontSize()

    Dim i As Long
    Dim val As Variant

    For i = 2 To 10
        val = Cells(i, 2).Value

        ' 数値が入っている行だけ処理する
        If IsNumeric(val) Then
            If val >= 80 Then
                Cells(i, 2).Font.Size = 16  ' 80点以上は大きめ
            ElseIf val >= 50 Then
                Cells(i, 2).Font.Size = 12  ' 50〜79点は標準
            Else
                Cells(i, 2).Font.Size = 9   ' 50点未満は小さめ
            End If
        End If
    Next i

End Sub

IsNumeric(val) で数値かどうかを確認してから処理することで、空白や文字列が入っているセルでエラーになるのを防いでいます。

入力した文字列に応じてスタイルを変えるには?

「重要」「注意」「不要」などの文字列に応じて、太字・斜体・取り消し線を自動でつけるコードです。複数の条件を切り替えるときは Select Case が読みやすくなります。

Sub ChangeFontStyle()

    Dim i As Long
    Dim txt As String

    For i = 2 To 10
        txt = Cells(i, 3).Value

        Select Case txt
            Case "重要"
                Cells(i, 3).Font.Bold = True         ' 太字
            Case "注意"
                Cells(i, 3).Font.Italic = True       ' 斜体
            Case "不要"
                Cells(i, 3).Font.Strikethrough = True ' 取り消し線
            Case Else
                ' それ以外は何もしない
        End Select
    Next i

End Sub

セルに入力した直後に自動でスタイルを変えるには?

マクロを手動で実行せずに、セルに入力した瞬間に自動でスタイルを変えたい場合は Worksheet_Change イベントを使います。このコードはシートモジュール(標準モジュールではなく、対象シートのコードウィンドウ)に貼り付けます。

Private Sub Worksheet_Change(ByVal Target As Range)

    ' B2:B10の範囲が変更されたときだけ処理する
    If Not Intersect(Target, Range("B2:B10")) Is Nothing Then

        Dim v As Variant
        v = Target.Value

        If IsNumeric(v) Then
            If v >= 80 Then
                Target.Font.Size = 16
            ElseIf v >= 50 Then
                Target.Font.Size = 12
            Else
                Target.Font.Size = 9
            End If
        End If

    End If

End Sub

コードの流れ

  • Worksheet_Change:シートのセルが変更されるたびに自動で動くイベントです。
  • Intersect(Target, Range("B2:B10")):変更されたセルがB2:B10の範囲と重なっているかを調べます。重なっていれば処理を実行します。
  • シートモジュールに貼り付けるには、VBAの編集画面(Alt+F11)で対象シート名をダブルクリックして開いたエリアに貼り付けます。

まとめ

  • フォントサイズFont.Size = 数値 で変えられる。
  • 太字Font.Bold = True
  • 斜体Font.Italic = True
  • 取り消し線Font.Strikethrough = True
  • 自動で変えるWorksheet_Change イベントをシートモジュールに書く。

よくある質問

スタイルを一度リセットしてから設定したい場合は?

条件分岐の前に Cells(i, 2).Font.Bold = False のようにスタイルをFalseに戻してからつけ直すと、前回の設定が残らなくなります。複数回マクロを実行する場合はリセット処理を入れておくのがおすすめです。

Select CaseとIf文はどう使い分ける?

同じ変数を複数の値と比較する場合は Select Case の方がすっきり書けます。条件が「〇〇以上・以下」のような範囲の比較の場合は If〜ElseIf の方が向いています。

Worksheet_Changeイベントはどこに書けばいい?

VBAの編集画面(Alt+F11)を開いて、左側のプロジェクトエクスプローラーから対象のシート名(例:Sheet1)をダブルクリックして開いたエリアに貼り付けます。標準モジュールに書いても動かないので注意してください。

複数のセルを一度に変更したときにエラーになる場合は?

コピー&ペーストなどで複数セルを一度に変更すると、Target に複数のセルが入ります。その場合 Target.Value が配列になるためエラーが出ることがあります。対策として If Target.Count > 1 Then Exit Sub をコードの最初に追加すると、複数セルの変更時はスキップできます。

フォントの色も条件で変えることはできる?

できます。Cells(i, 2).Font.Color = RGB(255, 0, 0) のようにRGB関数で色を指定します。フォントサイズやスタイルと組み合わせることで、より視覚的にわかりやすいシートを作れます。


動画で学びたい方へ

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

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

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

コメントする

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

上部へスクロール