3

Excel シート (Excel 2010 を使用) の選択した列にある単語/フレーズのすべてのインスタンスを赤と太字で強調表示したいと思います。たとえば、列 A1:A10 に「茶色のキツネは他の茶色のキツネが好き」という文が含まれている場合、この範囲内の「茶色のキツネ」のすべてのインスタンスを強調表示したいと思います。

ここで、すべてのセルで「茶色のキツネ」の最初のインスタンスのみを強調表示するマクロを見つけました。

Sub colorText()

Dim cl As Range
Dim startPos As Integer
Dim totalLen As Integer
Dim searchText As String

' specify text to searh.
searchText = "brown fox"

' loop trough all cells in selection/range
For Each cl In Selection

  totalLen = Len(searchText)
  startPos = InStr(cl, searchText)

  If startPos > 0 Then
    With cl.Characters(startPos, totalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With
  End If
Next cl

End Sub

このマクロを編集して、「茶色のキツネ」の最初のインスタンスだけでなく、すべてのインスタンスを強調表示したいと思います。試みとして、私は次のことを試しました:

Sub colorText()

Dim cl As Range
Dim startPos As Integer
Dim totalLen As Integer
Dim searchText As String
Dim endPos As Integer
Dim testPos As Integer

' specify text to search.
searchText = "brown fox"

' loop trough all cells in selection/range
For Each cl In Selection

  totalLen = Len(searchText)
  startPos = InStr(cl, searchText)
  testPos = 0

  Do While startPos > testPos
    With cl.Characters(startPos, totalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With

    endPos = startPos + totalLen
    testPos = testPos + endPos
    startPos = InStr(testPos, searchText)
  Loop

Next cl

End Sub

ただし、これはまだ「brown fox」の最初のインスタンスをフォーマットするだけです。

どんな考え/編集も大歓迎です。

4

2 に答える 2

4

あなたのエラーはあなたのロジックにあります。以下のようにコードを修正する必要があります。

 startPos = InStr(testPos, cl, searchText, vbTextCompare)

これを行う代わりに:

 startPos = InStr(testPos, searchText)

2番目のサブで。今見えますか?:-)

于 2013-03-15T18:19:17.473 に答える
0

セルの範囲で特定の単語をフォーマットしようとしていたときに、同じ問題が発生しました。何度か試行し、多くのインターネット検索を行った結果、これが最も効果的でした...

Sub FormatWords()
Dim Rng As Range, cl As Range, Red As Integer
Dim oStrg As String
Set Rng = Range(Range("D1"), Range("D" & Rows.Count).End(xlUp))
On Error Resume Next
oStrg = "Apple"
If oStrg = "" Then Exit Sub

For Each cl In Rng
    Red = InStr(1, cl, oStrg, vbTextCompare)

    Do Until Red = 0
        With cl.Characters(Red, Len(oStrg))
        .Font.Color = RGB(230, 25, 55)
        .Font.Bold = True
         End With
         Red = InStr(Red + 1, cl, oStrg, vbTextCompare)
    Loop
Next cl

oStrg = "Mango"
If oStrg = "" Then Exit Sub

For Each cl In Rng
    Orange = InStr(1, cl, oStrg, vbTextCompare)
    Do Until Orange = 0
        With cl.Characters(Orange, Len(oStrg))
        .Font.Color = RGB(250, 200, 0)
        .Font.Bold = True
        End With

        Orange = InStr(Orange + 1, cl, oStrg, vbTextCompare)
    Loop
Next cl

End Sub
于 2016-06-30T17:13:53.647 に答える