| 
    
     |  | >▼ひゅーが さん: >こんばんは。
 >>すでにシートに入力されたデータの中で、特定の文字列(複数)の色を変更したいのですが、
 >>どなたかよい方法をご存じないでしょうか。
 >>いろいろ試してみたんですが、なかなかうまくいかず困っています。
 >>みなさんのお知恵を貸していただけるとさいわいです。
 >>よろしくお願いします。
 >以下の例は、保護などされていないアクティブシートに対しての例です
 >'========================================================
 >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
 >
 >確認してみて下さい。
 
 |  |