我在 Excel 工作表中分别在 A、B 和 C 列中有以下数据。
+-----------+--------------+----------------+
| RangeName | Clear? | Value if Clear |
+-----------+--------------+----------------+
| Name1 | DO NOT CLEAR | |
| Name2 | | 6 |
| Name3 | | 7 |
| Name4 | DO NOT CLEAR | |
| Name5 | DO NOT CLEAR | |
| Name6 | DO NOT CLEAR | |
| Name7 | DO NOT CLEAR | |
| Name8 | DO NOT CLEAR | |
| Name9 | | 5 |
| Name10 | | 9 |
+-----------+--------------+----------------+
有一个“清除”宏检查每个 excel 范围名称,如果 B 列显示“请勿清除”,那么它将跳过并且什么也不做,如果它是空白的,那么它将清除范围名称并将范围名称值设置为列C、代码如下:
For i = 1 To MaxRowCount
Select Case Range("RngeTbl").Cells(i, 2).Value
Case "DO NOT CLEAR" 'do nothing
Case Else 'set to default value
Range(Range("RngeTbl").Cells(i, 1).Value).Value = Range("RngeTbl").Cells(i, 3).Value
End Select
Next i
但是,范围名称的数量正在大量增加,现在我有 32571 个范围名称。
有没有办法可以加快这个宏?我一直在尝试将列放入数组并以某种方式检查,但我没有运气。
请提供任何帮助!
最佳答案
下面的代码应该稍微好一点(如果在 Application.ScreenUpdating = Fasle
的上下文中运行,等等):
Dim A As Variant
Set A = Range("RngeTbl").Value
For i = 1 To UBound(A)
If A(i,2) <> "DO NOT CLEAR" Then Range(A(i,1)).Value = A(i,3)
Next i
如果
MaxRowCount
小于范围内的行数,那么您当然可以使用它而不是 UBound(A)
在循环。
关于excel - VBA - 避免循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52534823/