如何在Excel 2010中突出显示给定范围或选区的单个单元格的每个实例?

我想用红色和粗体突出显示Excel工作表中选定列中每个词/词组的实例(使用Excel 2010)。 例如,如果列A1:A10包含句子“棕色的狐狸喜欢另一只棕色的狐狸”,我想在这个范围内突出每一个“棕色的狐狸”的例子。

我在这里发现了一个macros,只在每个单元格中突出显示“棕色狐狸”的第一个实例:

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 

我想编辑这个macros,以便突出每个“棕色狐狸”的实例,而不仅仅是第一个。 作为一个尝试,我尝试了以下几点:

 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 

但是,这仍然只是格式化“棕色狐狸”的第一个例子。

任何想法/编辑将不胜感激。

你的错误是在你的逻辑上。 你应该修改代码如下:

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

而不是做这个:

  startPos = InStr(testPos, searchText) 

在第二部分。 你现在看到了吗? 🙂

当我想要在一系列单元格中格式化特定单词时,我遇到了同样的问题。 经过多次尝试和大量的互联网search,这是一个最好的工作…

 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