和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セル内の文字列を一部だけ着色する - Characters

セル内の文字列を一部だけ着色(書式変更)する方法を解説します。

セル内の文字列を一部だけ着色

RangeオブジェクトのCharactersプロパティ.Fontプロパティを使用します。

基本構文

対象セル.Characters(開始位置, 文字数).Font.Color = 設定RGB値

サンプルコード

' 4~6文字目を赤色に
対象セル.Characters(4, 3).Font.Color = RGB(255, 0, 0)

' 4文字目以降を赤色に
対象セル.Characters(4, 9999).Font.Color = RGB(255, 0, 0)

' 着色以外の書式設定
対象セル.Characters(4, 3).Font.Bold = True ' 太字
対象セル.Characters(4, 3).Font.Italic = True ' 斜体
対象セル.Characters(4, 3).Font.Name = "MS Pゴシック" ' フォント種類
対象セル.Characters(4, 3).Font.Size = 12 ' フォントサイズ
対象セル.Characters(4, 3).Font.Underline = xlUnderlineStyleSingle ' 下線
対象セル.Characters(4, 3).Font.Underline = xlUnderlineStyleDouble ' 二重下線
対象セル.Characters(4, 3).Font.Strikethrough = True ' 取り消し線
対象セル.Characters(4, 3).Font.Superscript = True ' 上付き文字
対象セル.Characters(4, 3).Font.Subscript = True ' 下付き文字

解説

セル内の文字列を一部分だけ書式設定するには、
RangeオブジェクトのCharactersプロパティ.Fontプロパティを使用します。

開始位置と文字数を指定して「何文字目から何文字分」を取得しますので、
Mid関数と同じ仕様と捉えると理解しやすいですね。


Mid関数と違い「第2引数省略時は残りの文字すべて」という仕様はないですが、
代わりに第2引数に元文字列を超える文字数を渡してもエラーになりません。

よって「○文字目から最後まで」は9999などを渡しておくことで実装できます。


サンプルの通り文字色以外にも太字やフォントサイズなど様々な設定ができ、
上記の他に以下の設定も可能ですので参考にしてください。

対象セル.Characters(4, 3).Font.ThemeFont = 1 ' フォント種類(テーマ見出し)
対象セル.Characters(4, 3).Font.ThemeFont = 2 ' フォント種類(テーマ本文)
対象セル.Characters(4, 3).Font.ColorIndex = 5 ' 文字色(カラーパレット指定)
対象セル.Characters(4, 3).Font.ThemeColor = 3 ' 文字色(テーマカラー指定)

 
ちなみにCharactersオブジェクトは意外にもセル範囲に実行可能です。

' 範囲内すべてのセルの4文字目以降を赤色に
Range("A1:C1000").Characters(4, 9999).Font.Color = RGB(255, 0, 0)

一括で実行したい場合はセル範囲から実行してください。

特定の文字列だけを着色したい場合

セルのテキストから「(注)」だけを検索して着色したいといった場合は、
Instr関数でその文字列を検索し、それをCharactersの第1引数に渡します。

Sub セル内の特定文字列だけを着色する()
    
    Dim 対象セル As Range: Set 対象セル = Range("A1")
    Dim 着色文字列 As String: 着色文字列 = "(注)"
    
    ' セル内テキストを検索
    Dim instr位置 As Long
    instr位置 = InStr(対象セル.Value, 着色文字列)
    
    ' 文字列があれば赤色にする
    If instr位置 > 0 Then
        対象セル.Characters(instr位置, Len(着色文字列)).Font.Color = RGB(255, 0, 0)
    End If
    
End Sub

 
特定文字列を探してその部分だけを書式設定したい場合は、

Characters(Instrで求めた開始位置, Lenで求めた文字数)

このコードで対象文字列を取得して設定してください。


詳しくはこちらの記事をどうぞ。
www.limecode.jp