【问题标题】:Search a column for text and highlight that row在列中搜索文本并突出显示该行
【发布时间】:2015-01-29 23:04:24
【问题描述】:

我正在尝试在第一列的单元格中搜索“/”。我需要浏览 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

这是我正在使用的代码。如果有人能提供一些帮助,我将不胜感激。

【问题讨论】:

  • 这可以通过基于公式的条件格式来完成;例如=ISNUMBER(FIND("/", $A1))

标签: excel vba


【解决方案1】:

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

For x = 1 To 13 Step -1

这永远行不通;只有当值的顺序​​是降序时,负步骤才会起作用。

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

Excel VBA 中的Find 有点复杂。对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

【讨论】:

  • 感谢您的帮助。我想如果我使用 for 语句,它会让我通过工作表。这非常有效。再次感谢!
猜你喜欢
  • 2012-03-24
  • 2022-10-07
  • 2015-06-28
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多