さて、次のようなコードを書きました。
Sub 文字列検索() Application.ScreenUpdating = False Dim MaxRow As Byte, MaxRow2 As Byte, i As Byte, length As Byte, j As Byte, MaxLen As Integer, k As Integer, rng As String, start As Integer MaxRow = Range("A1").End(xlDown).Row If Range("I2").End(xlDown).Row > 200 Then MsgBox "検索文字が入力されていません。" Exit Sub End If MaxRow2 = Range("I2").End(xlDown).Row For i = 2 To MaxRow2 length = Len(Cells(i, 9)) Cells(i, 9).Select For j = 2 To MaxRow MaxLen = Len(Cells(j, 5)) For k = 1 To MaxLen rng = StrConv(Cells(i, 9).Value, vbWide) If InStr(k, Cells(j, 5), rng) > 0 Then start = InStr(k, Cells(j, 5), Cells(i, 9)) Cells(j, 5).Characters(start:=start, length:=length).Font.Size = 16 Cells(j, 5).Characters(start:=start, length:=length).Font.ColorIndex = 3 k = start Else k = MaxLen End If rng = StrConv(Cells(i, 9).Value, vbNarrow) If InStr(k, Cells(j, 5), rng) > 0 Then start = InStr(k, Cells(j, 5), Cells(i, 9)) Cells(j, 5).Characters(start:=start, length:=length).Font.Size = 16 Cells(j, 5).Characters(start:=start, length:=length).Font.ColorIndex = 3 k = start Else k = MaxLen End If Next k Next j Next i End Sub
この記述で検索文字を半角にして実行すると18行目がスルーされ、同じ構文の27行目の"If InStr(k, Cells(j, 5), rng) > 0 Then"の部分で「プロシージャの呼び出し、または引数が不正です。」と表示されてエラーになり、その下の行の変数startが0になってしまいます。
また、全角文字で検索すると、対象文の中の同じ全角文字は検索できますが、半角で入力されたものはスルーされてしまいます。
理由がわからないので教えていただけないでしょうか?
なお、このマクロの目的は検索対象の文章の中に、検索したい文字が全角であったり半角で入力されたりしているため、マクロで検索したい文字を全角と半角に置き換えてそれぞれを検索し、見つかった場合はフォントサイズを大きくして色を変えたい、というものです。
また、検索対象の文章の中に検索文字が複数ある場合があるため、1度見つけても次の位置から最後の文字まで再度検索させています。
わかりにくければ補足させていただきます。
よろしくお願いします。
【画像についての説明】
E列が検索対象となる文章が入力されている列、I列が検索文字を入力する列です。
文章は適当に貼りつけたものなので、内容は気にしないでください。
検索文字の「英語」ではE2のセルで見つけますが、「男」ではE2とE6のセルで見つけます。
また、「マゾ」ではE7のセルの”マゾ"と"マゾ"の両方を検索できるようにしたいです。
不明な点があれば答えさせていただきます。
よろしくお願いいたします。
回答5件
あなたの回答
tips
プレビュー