VBA代码不会将数组写入范围,只会写入第一个元素

Ale*_*uck 4 arrays excel vba

我需要执行以下操作:

  • 将 C2:AU264 范围提升为 2D 数组
  • 创建另一个一维数组,(1 到 11880)
  • 用第一个数组中的值填充第二个数组(“转置”)
  • 将数组 2 写回工作表

这是我正在使用的代码:

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)