セル全体の色を変える方法はよく見かけるのですが、セル内の検索した文字列だけ色を変えるマクロはなかなか見かけないので、サンプルコードを作成してみました。
仕様
「検索文字」の欄に文字列を入力してボタンを押下すると、検索ヒットした一覧表のセル内の文字列を赤字にしてみます。
セル内に複数の検索結果があっても、ヒットした文字列の色を全て変更するのがポイントです。
ソースコード
基本的な構文は下記のとおりです。
Cells(行,列).Characters(Start:=num1, Length:=num2).Font.Color = RGB(numR,numG,numB)
これを使って、サンプルコードを記述しました。
Sub changeColor()
Dim target As String
Dim targetLength As Integer
'検索対象
target = Range("B2").Value
'長さ
targetLength = Len(target)
'表の最後までループする
Dim i As Long
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
Dim strStartPosition As Long
Do
'セル内を文字列検索する
strStartPosition = InStr(strStartPosition + 1, Cells(i, 2), target, vbBinaryCompare)
'セル内に検索対象が存在する場合
If strStartPosition <> 0 Then
'赤色に色づけする
Cells(i, 2).Characters(Start:=strStartPosition, Length:=targetLength).Font.Color = RGB(255, 0, 0) '赤
'セル内の検索位置を1文字ずらす
strStartPosition = strStartPosition + 1
End If
Loop Until strStartPosition = 0
Next
End Sub
テスト実行
こちらをテスト実行してみます。
実行前
実行前は、何も色付けされていません。
なお、検索文字は「博多」にしてみました。
実行後
実行すると、「博多」という文字列が存在するセル内の文字に色付けされました。
もちろん、その他の文字列でも大丈夫です。
※「市」で検索してみました。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | Excel | Excel2016 |
以上です。
コメント