我有一个包含 84 列和 249,000 多行的报告文件。 (行数每个月都会不同。)我需要能够在整个报告中搜索 9 个搜索词,并报告搜索词是否出现在每行中。 (即,如果找到第一项,请在 A 列中写“是”,第二项在 B 列中写“是”,依此类推)。
搜索词可以单独出现在 AQ 和 CC 之间的任何列中(不是每行中的同一列);在 CD 列中,搜索词可能是一系列以逗号分隔的文本。
Sub CodeSearch()
Application.ScreenUpdating = False
Dim i As Long
Dim foundRng As Range
Dim Lastrow As Long
Lastrow = Cells(Rows.Count, "J").End(xlUp).Row
'set worksheets
With ThisWorkbook
Set wsSource = .Worksheets("TestData")
End With
With wsSource
For i = 2 To Lastrow
Set foundRng = Range("AQ" & i & ":CD" & i).Find("Term1")
If foundRng = True Then
Worksheets("TestData").Range("A" & i).Value = "Yes"
End If
Set foundRng = Range("AQ" & i & ":CD" & i).Find("Term2")
If foundRng Is True Then
Worksheets("TestData").Range("B" & i).Value = "Yes"
End If
Set foundRng = Range("AQ" & i & ":CD" & i).Find("Term3")
If foundRng Is True Then
Worksheets("TestData").Range("C" & i).Value = "Yes"
End If
Next i
Application.ScreenUpdating = True
End With
End Sub
(代码已缩短,但您明白了要点) 我使用 J 列来计算行数,因为它不能为空。
我第一次尝试时,没有 With / End With,并且每行都有“IffoundRng Is Nothing then”。这导致仅在第 2 行的每一列中输入“是”。一旦我将“Is Nothing”更改为“Is True”,我得到一个“对象变量或 With 块未设置”。我添加了 With 块,但仍然收到该消息。
任何帮助将不胜感激。
这应该可以满足你的要求:
Sub CodeSearch()
Dim Lastrow As Long, rw As Range
With ThisWorkbook.Worksheets("TestData")
Set rw = .Range("AQ2:CD2") 'start on this row
Lastrow = .Cells(.Rows.Count, "J").End(xlUp).row
End With
Application.ScreenUpdating = False
Do While rw.row <= Lastrow 'loop over rows
'match is faster than find....
If Not IsError(Application.Match("Term1", rw, 0)) Then
rw.EntireRow.Columns("A").Value = "Yes"
End If
If Not IsError(Application.Match("Term2", rw, 0)) Then
rw.EntireRow.Columns("B").Value = "Yes"
End If
If Not IsError(Application.Match("Term3", rw, 0)) Then
rw.EntireRow.Columns("C").Value = "Yes"
End If
Set rw = rw.Offset(1, 0) 'next row
Loop
Application.ScreenUpdating = True
End Sub