在列中搜索文本并突出显示该行

时间:2014-12-01 20:42:18

标签: excel excel-vba vba

我正在尝试在第一列的单元格中搜索“/”。我需要浏览13个工作表,找到包含“/”(也可能包含其他文本)的单元格,然后突出显示该行。我一直在测试我在网上找到的代码,并且没有太多运气来完成整个工作簿。

Dim value As String

value = "/"

x = 1

For x = 1 To 13 Step -1
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
    For y = 1 To lastrow
    Range("a" & i).Find (value)
    Range("a" & i).Rows.Interior.Color = RGB(256, 1, 1)

    Next y
Next x

这是我正在使用的代码。如果有人能提供一些帮助我会非常感激。

1 个答案:

答案 0 :(得分:0)

这与你的问题无关,但我注意到的第一件事就是:

For x = 1 To 13 Step -1

这永远不会奏效;只有当值的顺序​​降序时,否定步骤才会起作用。

您遗漏了任何选择的工作表。如果您正在遍历工作簿中的所有工作表,那么最简单的方法是使用For each wks in Worksheets

Excel中的

Find VBA有点复杂。对Find的调用将返回包含指定文本的范围中的第一个单元格。然后,您需要对FindNext进行后续调用以获取任何其他匹配的单元格。但是,FindNext将永远运行 - 您需要保存对第一个匹配单元格的引用,然后比较从FindNext获得的结果,直到第一个匹配的单元格再次出现。

我将如何做到这一点:

Sub foo()
    Dim value As String: value = "/"
    Dim rSearch As Range
    Dim firstFound As Range
    Dim nextFound As Range
    Dim wks As Worksheet

    For Each wks In Worksheets
        wks.Activate

        Set rSearch = Range("a1", Cells(Rows.Count, "a").End(xlUp))
        Set firstFound = rSearch.Find(value)
        If Not firstFound Is Nothing Then
            Set nextFound = firstFound
            Do
                nextFound.EntireRow.Interior.Color = RGB(256, 1, 1)
                Set nextFound = rSearch.FindNext(nextFound)
            Loop While nextFound.Address <> firstFound.Address
        End If
    Next
End Sub