我们通常使用表达式:Cells(i, 1),, Cells(i, "A")或Range("A" & i)在VBA中引用动态单元格,但我发现以下奇怪的代码也有效:
Sub Test1()
For i = 1 To 10000
Range("A1")(i) = i
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
我还发现使用方括号[]来表示单元格的快捷符号(是的,我知道表达EVALUATE命令的简写方法)也可以在这里使用,如下面的代码
Sub Test2()
For i = 1 To 10000
[A1].Resize(1000, 1)(i) = i
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
要么
Sub Test3()
For i = 1 To 10000
[A1].Offset(i - 1) = i
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
与流行的看法相反,方括号只能用快捷符号表示固定范围.我测试了所有这些,他们返回了相同的输出.
老实说,我从来没有想过这三个表达式都存在过,所以我猜它们可能是新的.这是真的吗?
我不仅找到了它们,还测试了它们以确定哪一个是最好的.最好的我的意思是他们使用计时测试的表现.我测试了这些陈述:
Cells(i, 1) = RndRange("A" & i) = RndCells(i, "A") = Rnd …我有一个VBA宏,它将数据写入清除的工作表,但它真的很慢!
我正在从Project Professional中实例化Excel.
Set xlApp = New Excel.Application
xlApp.ScreenUpdating = False
Dim NewBook As Excel.WorkBook
Dim ws As Excel.Worksheet
Set NewBook = xlApp.Workbooks.Add()
With NewBook
.Title = "SomeData"
Set ws = NewBook.Worksheets.Add()
ws.Name = "SomeData"
End With
xlApp.Calculation = xlCalculationManual 'I am setting this to manual here
RowNumber=2
Some random foreach cycle
ws.Cells(RowNumber, 1).Value = some value
ws.Cells(RowNumber, 2).Value = some value
ws.Cells(RowNumber, 3).Value = some value
...............
ws.Cells(RowNumber, 12).Value = some value
RowNumber=RowNumber+1
Next
Run Code Online (Sandbox Code Playgroud)
我的问题是,foreach周期有点大.最后,我将获得大约29000行.在漂亮的OK计算机上完成此操作需要超过25分钟.
是否有任何技巧可以加快写入细胞的速度?我做了以下事情:
xlApp.ScreenUpdating = False …Run Code Online (Sandbox Code Playgroud)