excel - VBA - 避免循环
问题描述
我在 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 个范围名称。
有没有办法可以加快这个宏?我一直在尝试将列放入数组并以某种方式检查,但我没有运气。
请提供任何帮助!
解决方案
RngeTbl
此代码将在“清除?”上对您的范围进行排序。列,然后计算“清除”中有多少个非空白单元格?列,并在下一行开始循环。
这将意味着循环跳过所有“请勿清除”范围 - 如果要清除所有范围,则代码运行速度会稍慢。如果没有要清除的范围,那么代码将只需要与清除范围一样长的时间Sort
。
Dim lStart As Long
'Sort the range, without header
[RngeTbl].Sort [RngeTbl].Cells(1, 2), xlAscending, Header:=xlNo
'Since Calculation should be Manual for speed, we recalculate the sorted Range...
[RngeTbl].Calculate
'Count the Non-Blank cells in the "Clear?" column, to find the first non-blank cell
lStart = 1 + WorksheetFunction.CountA([RngTbl].Columns(2))
'If there ARE any non-blank cells
If lStart <= MaxRowCount Then
'Skip all of the "DO NOT CLEAR" cells
For i = lStart To MaxRowCount
Range(Range("RngeTbl").Cells(i, 1).Value).Value = Range("RngeTbl").Cells(i, 3).Value
Next i
Next lStart
推荐阅读
- mongodb - mongorestore 的 nsInclude 参数无效
- flutter - 如何在flutter gcloud.storage中公开文件?
- javascript - 使用客户端javascript检查注册表项的存在
- java - KafkaIO with BootStrapServers
- reactjs - 使用 React Router 处理“找不到页面”
- typescript - 具有映射和条件类型的递归类型定义
- c - asm volatile("" ::: "memory") 的便携式等价物?
- css - MediaWiki:如果菜单是西里尔文,如何在每个菜单的侧边栏中添加图像(图标)?
- c# - SqlBulkCopy.WriteToServer 工作需要哪些 GRANTS?
- swift - Xcode 13,Swift5.5,“错误:'FilePath' 类型的值没有成员'components'”