【Excel/VBA のこと 22】
セル内の指定した文字列にだけ色を付けるには
Characters を使います。
応用編として私が業務でどのように使用しているか紹介しようと思い、
業務に似ているサンプルを考えたのですが、いいものが浮かびませんでした。
便利さをお伝えできそうにありませんが、
仕組みだけでも書いてみようと思います。
****************************************************
都道府県のリストをサンプルにします。
Range("B1") にキーワード「山」を入力して、
そのキーワードが列Bのセルに含まれていたら赤色を付けるマクロです。
*****************************************************************
マクロ
Sub 特定の文字色付け()
Dim Target As String 'キーワードを格納
Dim SLetter As Long 'キーワードのスタート位置を格納
Dim TargetLen As Long 'キーワードの文字数を格納
Dim r As Long '行番号を格納
Dim c As Long '列番号を格納
Dim LastR As Long '最終行を格納
Target = Selection 'Range("B1")に入力したキーワードを取得する(山)
c = Selection.Column 'キーワードを入力したセルの列番号を取得する(2)
'キーワードを入力したセルの列から最終行を取得する(11)
LastR = Cells(Rows.Count, c).End(xlUp).Row
'検索したい列と同じ列にキーワードを入力して、
'そのままそのセルを選択したままにしておけば
'「Selection」を使用できるので便利です
For r = 3 To LastR
If InStr(Cells(r, c), Target) > 0 Then 'もしセルにキーワードが含まれていたら
'キーワードのスタート位置を取得する
SLetter = InStr(Cells(r, c), Selection) '(和歌山の場合は3)
TargetLen = Len(Target) 'キーワードの文字数を取得する(1)
Cells(r, c).Characters(Start:=SLetter, Length:=TargetLen).Font.ColorIndex = 3
End If
Next r
End Sub
マクロ実行結果
このサンプルデータでの場合は、フィルタリングすれば同じ結果を出せます。
その方が早いです。
フィルタリングすると周りの行(データ)が隠れてしまいますが、
この場合はを 行は非表示ならない ので、
周辺のデータと比較して確認作業ができます。
検索範囲を広げればすべてのセルを対象にもできます。
**********************************************************
個人用マクロブックについてはこちら
リボンに登録についてはこちら
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/