文字列の位置を指定して書式を設定する場合は、Charactersオブジェクトで対象の文字列に書式を設定します。
Charactersは、第一引数で文字列の開始位置、第二引数で対象の文字数を指定すると、引数で指定した範囲の文字列を操作できます。
Range(“セル番地”).Characters(開始位置,文字数)
位置を指定して書式を変更する
位置を指定して書式を設定する場合は、CharactersオブジェクトでFont.Colorプロパティなどに値を設定します。
コード
サンプルコードでは、2から5文字目(4文字分)のフォントやサイズを変更しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
'------------------------------------------------ '文字色 '------------------------------------------------ '定数で文字色を赤にする Range("B2").Characters(2, 4).Font.Color = rgbRed 'RGB関数で文字色を赤にする Range("B2").Characters(2, 4).Font.Color = RGB(255, 0, 0) '------------------------------------------------ '太字、斜体 '------------------------------------------------ '太字にする Range("B2").Characters(2, 4).Font.Bold = True '斜体にする Range("B2").Characters(2, 4).Font.Italic = True '------------------------------------------------ 'フォント名、フォントサイズ '------------------------------------------------ 'フォントをメイリオに変更 Range("B2").Characters(2, 4).Font.Name = "メイリオ" 'フォントサイズを20に変更 Range("B2").Characters(2, 4).Font.Size = 20 '------------------------------------------------ '文字に下線、取り消し線 '------------------------------------------------ '下線 Range("B2").Characters(2, 4).Font.Underline = xlUnderlineStyleSingle '取り消し線 Range("B2").Characters(2, 4).Font.Strikethrough = True |
実行前
実行後
特定の文字列を指定して書式を変更する
特定の文字列を指定して書式を変更する場合は、次の2ステップになります。
- InStrでセルの文字列から、検索する文字列を探す
- 検索する文字列があったら、その文字列の長さ分だけ書式を変更する
InStr関数は、検索対象の文字列の中から、検索する文字列がある位置を返してくれます。
InStr(検索対象の文字列,検索する文字列)
つまりInStr関数は、検索する文字列が存在する時は1以上の値を返してくれます。
コード
1 2 3 4 5 6 7 8 9 10 11 |
'検索する文字列が存在するかチェック Dim lngStart As Long lngStart = InStr(Range("B2"), "えくとしょ") '検索する文字列が存在する時、書式を設定 If lngStart > 0 Then 'RGB関数で文字色を赤にする Range("B2").Characters(lngStart, 5).Font.Color = RGB(255, 0, 0) End I5 |
実行前
実行後
解説
検索する文字列が変わる可能性がある場合は、次のコードのようにすると柔軟性が増します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'検索する文字列を設定 Const KENSAKU_MOJI As String = "えくとしょ" '検索する文字列が存在するかチェック Dim lngStart As Long lngStart = InStr(Range("B2"), KENSAKU_MOJI) '検索する文字列が存在する時、書式を設定 If lngStart > 0 Then 'RGB関数で文字色を赤にする Range("B2").Characters(lngStart, Len(KENSAKU_MOJI)).Font.Color = RGB(255, 0, 0) End If |
ポイントとしては、検索する文字列を定数化しているので、検索する文字列に変更がある場合は定数にセットする箇所だけ変更すればOKです。
また、検索する文字列の文字数が変わったとしても、Len関数で文字数を取得しているので、内部の処理はなにも変更する必要がありません。
数字だけ書式を変更する
文字列の中の数字だけの書式を変更したい場合は、1文字ずつ数字か調べて書式を設定します。
この1文字ずつ数値か調べる時に、Like演算子を使うと条件文が簡単に書けます。
コード
数値かどうかのチェックをLike “[0-9]”で行っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Dim i As Long Dim wkMoji As String For i = 1 To Len(Range("B2").Value) '文字を1文字切り出し wkMoji = Mid(Range("B2").Value, i, 1) '数字の時、1文字ずつ書式を変更する If wkMoji Like "[0-9]" Then 'RGB関数で文字色を赤にする Range("B2").Characters(i, 1).Font.Color = RGB(255, 0, 0) End If Next i |
実行前
実行後
数値だけのセルでは文字色の一部を変更できません。
(実際にVBAでなく、エクセルでやってみてください。)
なので、VBAでもできないです。
まあ、セルの書式を文字列に変更すれば強引にできますが・・・