excel - Excel VBA - 加速编辑列中所有单元格的循环
问题描述
我正在使用以下方法将列中的所有条目(第 1 行中的标题除外)修剪为最后四个字符:
Range("A2").Select
Do While ActiveCell <> ""
ActiveCell = Right(ActiveCell.Value, 4)
ActiveCell.Offset(1, 0).Select
Loop
它可以工作,但在大文件上速度很慢。有谁知道我怎样才能加快速度?
解决方案
除了评论中的链接答案外,我更喜欢在循环时使用变体数组。它们存储在内存中。每当访问工作表时,vba 都需要放慢速度。通过限制我们的互动,我们可以加快速度。
Sub right4()
With ActiveSheet 'better to use actual worksheet ie Worksheets("Sheet1")
Dim rng As Range
Set rng = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
End With
Dim rngarr As Variant
rngarr = rng.Value
Dim i As Long
For i = 1 To UBound(rngarr, 1)
rngarr(i, 1) = Right(rngarr(i, 1), 4)
Next i
rng.Value = rngarr
End Sub
如果不想使用循环:
Sub right4()
With ActiveSheet 'better to use actual worksheet ie Worksheets("Sheet1")
Dim rng As Range
Set rng = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
rng.Value = .Evaluate("INDEX(RIGHT(" & rng.Address(0, 0) & ",4),)")
End With
End Sub
虽然我猜想第二个的时间会接近第一个代码的第二个。
推荐阅读
- javascript - 创建 indexOf 函数
- python - Django Python在Json中合并一些数据
- applescript - 使用参数将 AppleScript 编译到应用程序中
- python - 我无法阅读 EAST: An Efficient and Accurate Scene Text Detector as .pb file in jupyter notebook
- java - 如何以最佳方式合并隐藏/可见面板?
- javascript - 如何通过点击特定文本来打开模态窗口
- python - 如何从 Google App Engine 使用 Mailjet
- pyspark - Pyspark groupby with udf:本地机器性能不佳
- android - 将数据库文件上传到谷歌驱动器 AppDataFolder ,但谷歌驱动器管理应用程序有一个奇怪的应用程序名称
- javascript - 如何在 Oracle APEX 中将 SQL 查询数据与 HTML 中的 JavaScript 链接