|
▼ひゅーが さん:
こんばんは。
>すでにシートに入力されたデータの中で、特定の文字列(複数)の色を変更したいのですが、
>どなたかよい方法をご存じないでしょうか。
>いろいろ試してみたんですが、なかなかうまくいかず困っています。
>みなさんのお知恵を貸していただけるとさいわいです。
>よろしくお願いします。
以下の例は、保護などされていないアクティブシートに対しての例です
'========================================================
Sub main()
Dim rng As Range
Dim 開始 As Range
Dim 色かえる文字列 As String
色かえる文字列 = "abc" '例では、abcという文字列の色を変更します
Set 開始 = Cells.SpecialCells(xlCellTypeLastCell)
Set rng = find_rng(開始, Cells, 色かえる文字列)
Do While Not rng Is Nothing '指定文字列が含まれるセルがある間ループ
Call chg_char_color(rng, 色かえる文字列, 4, True)
' ↑色を変える処理
Set rng = find_rng(開始)
' 次の検索
Loop
End Sub
'====================================================================
Function find_rng(開始 As Range, Optional 検索範囲 As Range = Nothing, Optional fwd = "") As Range
'input 検索範囲: 省略可能 検索するセル範囲
' fwd : 省略可能 検索する文字、数値
'input-output 開始 : 検索開始セルを指定する最初は、最後のセルを指定する
' 2回目以降は、サブルーチンがi/oに使用する
'output find_rng :検索した結果条件にあったセル。尚、見つからない場合、もしくは、一通り、検索が終了した場合は、nothingが入る
Static sv検索範囲 As Range
Static svfwd
Static first_fd As Range
Dim fd As Range
If Not 検索範囲 Is Nothing Then
Set sv検索範囲 = 検索範囲
svfwd = fwd
Set first_fd = Nothing
End If
With sv検索範囲
If first_fd Is Nothing Then
Set fd = .Find(svfwd, 開始, LookIn:=xlValues, MatchCase:=True, MatchByte:=True)
Set first_fd = fd
Set 開始 = fd
Set find_rng = fd
Else
Set fd = .FindNext(開始)
If Not Intersect(first_fd, fd) Is Nothing Then
Set find_rng = Nothing
Else
Set 開始 = fd
Set find_rng = fd
End If
End If
End With
End Function
'=====================================================================
Function chg_char_color(rng As Range, col_str As String, color_idx As Long, Optional whole As Boolean = False) As Long
'指定されたセルの指定された文字列を指定されたカラーインデックスの色に変える
'input rng : 文字列の入ったセル
' col_str:色を変更する文字列
' color_idx :カラーインデックス
' whole: true 複数個の文字列の色変更,false 最初だけ変更(規定値)
Dim st As Long
Dim c_len As Long
st = 1
c_len = Len(col_str)
Do While st < Len(rng.Value)
st = InStr(st, rng.Value, col_str)
If st > 0 Then
With rng.Characters(Start:=st, Length:=c_len).Font
.ColorIndex = color_idx
End With
st = st + c_len
If whole = False Then Exit Do
Else
Exit Do
End If
Loop
End Function
確認してみて下さい。
|
|