我有一本包含数百张工作表的工作簿。对于Clear Votive Cup
出现在B栏,我需要改变的值H 列在同一行(从2.49
到1.49
)。这需要应用于所有工作表。
列始终乙和H,但行有所不同。我无法使用“查找-替换”,因为还有其他值2.49
需要保留2.49
。我可以创建一个If-Then
搜索整个工作簿的语句吗?
答案1
这个简单的程序可以解决这个问题。它包含两个循环:
对于 ThisWorkbook.Worksheets 中的每个 ws
这有点不言自明。这将循环遍历工作簿中包含此代码的每个工作表。
上面的循环包含另一个“子循环”:
对于 r = 2 到 lastRow(ws, "B")
因此,我们已经从上一个循环中知道了
ws
“父循环”中的当前工作表。r = 2 是起始行(如果没有任何列标题,可以将其更改为 r = 1)。lastRow
是我在下面的代码中包含的一个函数,用于自动确定任何列中的最后一行(在您的情况下,我们使用第 2 列/第 B 列)。
以下代码已经过测试并可运行:
Option Explicit
Sub changeRows()
Dim ws As Worksheet, r As Long
For Each ws In ThisWorkbook.Worksheets
ws.Activate
For r = 2 To lastRow(ws, "B")
If ws.Cells(r, 2) = "Clear Votive Cup" Then
ws.Cells(r, "H") = 1.49
End If
Next r
Next ws
End Sub
Function lastRow(ws As Worksheet, Optional col As Variant = 1) As Long
Debug.Print ws.Name
With ws
lastRow = .Cells(.Rows.Count, col).End(xlUp).row
End With
End Function