我需要执行以下操作:
这是我正在使用的代码:
Private Ws As Worksheet
Private budgets() As Variant
Private arrayToWrite() As Variant
Private lastrow As Long
Private lastcol As Long
Private Sub procedure()
Application.ScreenUpdating = False
Set Ws = Sheet19
Ws.Activate
lastrow = Ws.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).row
lastcol = Ws.Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
ReDim budgets(1 To lastrow - 1, 1 To lastcol - 2)
budgets= Ws.Range("C2:AU265")
ReDim arrayToWrite(1 To (lastCol - 2) * (lastRow - 1))
k = 0
For j = 1 To UBound(budgets, 2)
For i = 1 To UBound(budgets, 1)
arrayToWrite(i + k) = budgets(i, j)
Next i
k = k + lastrow - 1
Next j
Set Ws = Sheet6
Ws.Activate
Ws.Range("E2").Resize(UBound(arrayToWrite)).Value = arrayToWrite
'For i = 1 To UBound(arrayToWrite)
'Ws.Range(Cells(i + 1, 5).Address).Value = arrayToWrite(i)
'Next i
Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)
这只是写入范围 C2:AU264(第一个数组的第一个元素)到整个范围 E2:E11881 中的第一个值。但是,如果我在脚本结束之前取消注释 For 循环并这样做,它确实可以工作,但速度很慢。如何使用第一条语句正确写入数组?
小智 5
如果要将数组写入某个范围,则该数组必须具有二维。即使您只想写一个专栏。
改变
ReDim arrayToWrite(1 To (lastCol - 2) * (lastRow - 1))
Run Code Online (Sandbox Code Playgroud)
到
ReDim arrayToWrite(1 To (lastCol - 2) * (lastRow - 1), 1 To 1)
Run Code Online (Sandbox Code Playgroud)
和
arrayToWrite(i + k) = budgets(i, j)
Run Code Online (Sandbox Code Playgroud)
到
arrayToWrite(i + k, 1) = budgets(i, j)
Run Code Online (Sandbox Code Playgroud)