dポイントプレゼントキャンペーン実施中!

エクセルVBAの話です。

添付した画像のように、
A列のリストに登録した文字を、C列の文章から検索し、
その文字のみ色を付ける方法はありますでしょうか?

リストの単語数は200個程度で、
単語も文章も頻繁に内容が変わる状況です。
エクセルのバージョンは2010です。

もしよろしければよろしくお願い致します。

「エクセルVBA:リストに登録した単語と一」の質問画像

A 回答 (2件)

こんばんは!



画像の配置通りだとしての一例です。

Sub Sample1()
Dim i As Long, k As Long, myStr As String
Dim myFound As Range, myFirst As Range
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
myStr = Cells(i, "A")
Set myFound = Range("C:C").Find(what:=myStr, LookIn:=xlValues, lookat:=xlPart)
If Not myFound Is Nothing Then
Set myFirst = myFound
GoTo 処理
Do
Set myFound = Range("C:C").FindNext(after:=myFound)
If myFound.Address = myFirst.Address Then Exit Do
GoTo 処理
処理:
For k = 1 To Len(myFound)
If Mid(myFound, k, Len(myStr)) = myStr Then
myFound.Characters(Start:=k, Length:=Len(myStr)).Font.ColorIndex = 3
End If
Next k
Loop
End If
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。一発で動きました!
しかもキーワード200セル、文章3000セルでも1分かからずに処理が完了しました!

Rangeの指定セルあたりを実際の使用状況に合わせて変更して使用させて頂きます。
大変助かりました。

お礼日時:2016/08/20 23:00

http://pc.nikkeibp.co.jp/article/technique/20100 …
を変更することで可能ですね。
まずリスト範囲に「リスト」という名前をつけておきます。
そのリスト内の文字列に色をつけておけば、ヒットした文字列がその色に変更されます。

>For Each セル In Range("1:50")
の部分は
For Each セル In Range("C:C")
に変更することはできますが、そうして実行すると気が遠くなるほどの時間を要します。
For Each セル In Range("C2:C1000")
とか
For Each セル In Range("C2:C" & & Cells(Rows.Count, 3).End(xlUp).Row)
にした方がいいでしょう。

試してみましたが、リスト3個、文章50個でも初回は数十秒かかりました。
    • good
    • 0
この回答へのお礼

ありがとうございます。
これならVBA初心者の私にも自力で作成が可能になりそうです。
今後の自力作成や細部のカスタマイズの際に参考にさせて頂きます!

お礼日時:2016/08/20 23:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A