こんにちは、Ryoです。
Excelシート内で表示する文字列で強調したい部分は色を付けたりすることもあるかと思います。Excel操作の場合はセルを編集モードにして対象の文字を部分的にドラッグして選択し、そこで右クリック⇒書式設定で行ったりしますが、今回はこの操作をVBAで行う場合について書いてみたいと思います。
1.サンプル概要
サンプルとしてはシンプルですが、「Sample1」として「ExcelVBA」の文字の中で「VBA」を赤色に変えます。「Sample2」は本記事タイトルの「セル内文字列の一部に色を付ける」のなかで「一部に色」の部分を「青色」「フォントサイズ14」「太字」に変えます。
それぞれ実行してみると以下の通りになります。
2.サンプルコード
◆Sample1
Sub Sample1() With Cells(2, 2) '最後の文字(A)に二つ手前(V)から3文字指定し赤色を設定 .Characters(Len(.Value) - 2, 3).Font.Color = RGB(255, 0, 0) End With End Sub
指定セル内の文字列の一部を変更するにはCharactersプロパティを使用します。
オブジェクト.Characters(Start⇒文字の開始位置,length⇒文字数)
このような構文になり、引数Startは文字の開始位置、引数lengthは文字数を指定します。
サンプルではExcelVBAの文字列に対し、最後の3文字なのでLen関数で文字数を取得してから、最後の文字に対して二つ手前に位置にあるAを指定、そこから3文字を引数lengthに指定してFont.Colorにて赤色を設定しています。
.Characters(Len(.Value) – 2, 3).Font.Color = RGB(255, 0, 0)
文字列が短ければこのような処理でも問題ありませんが、やや長い文字列の場合に都度数える訳にもいきませんよね。その場合の対処例として以下のSample2のように処理することも出来ます。
◆Sample2
Sub Sample2() Dim i, Scnt, Ecnt, S_len As Integer Dim S_str As Variant For i = 1 To Len(Cells(4, 2)) '入力された文字も1文字ずつ取得 S_str = Mid(Cells(4, 2), i, 1) Select Case S_str '色を付ける最初の文字位置を取得 Case "一" Scnt = i '色を付ける最後の文字位置を取得 Case "色" Ecnt = i + 1 End Select Next i '色を付ける文字数を取得 S_len = Ecnt - Scnt With Cells(4, 2).Characters(Scnt, S_len) '色設定 .Font.Color = RGB(0, 0, 255) 'フォントサイズ設定 .Font.Size = 14 '太字設定 .Font.Bold = True End With End Sub
各プロパティなどの詳細は割愛しますが、先ず対象とする文字列数をLen関数で取得しループ処理を行って文字を一つずつ取得します。
For i = 1 To Len(Cells(4, 2))
‘入力された文字も1文字ずつ取得
S_str = Mid(Cells(4, 2), i, 1)
次に色を付けたい文字列の先頭「一」と最後の文字「色」をSelect Caseを使用して判定し、変数でその時の文字数(先頭からの位置)を取得します。
Select Case S_str
‘色を付ける最初の文字位置を取得
Case “一”
Scnt = i
‘色を付ける最後の文字位置を取得
Case “色”
Ecnt = i + 1
End Select
後は取得した文字の位置から文字数を把握して、Sample1同様にCharactersプロパティを使用して指定しますが、その中でフォントサイズや太字設定も合わせて行っています。
With Cells(4, 2).Characters(Scnt, S_len)
‘色設定
.Font.Color = RGB(0, 0, 255)
‘フォントサイズ設定
.Font.Size = 14
‘太字設定
.Font.Bold = True
End With
このように処理をすることで、色を付けたい文字列さえ明確であれば全体の文字数の変化には柔軟に対処出来ますので、実運用を考えた場合はこのような処理に近い形になるかと思います。
3.まとめ
Charactersプロパティを使用するようなケースは、処理した結果をメッセージとして表示する場合に「特定のキーワードを強調」したい時や、色を付けることによる視覚効果で認識性を向上させたい場合に有効な手段の一つだと思います。
実際利用頻度は高くないと思いますが、手段を知っておくことで意外な用途が見つかることは私も多々ありますから、知っておいて損は無いと思いますので機会があれば活用などをご検討くださいませ!
以上、セル内文字列の一部に色を付ける方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo