我正在尝试将数组直接转储到工作表而不循环。这对于除“字节”数组之外的所有数据类型都是可能的。为什么会这样?
我想使用Byte数组,以节省内存成本(数据经常超过2GB excel限制)。虽然我通过分成 block 来解决这个问题,但我想了解为什么字节数组不能直接转储到范围中。
编辑1:
数组值为 0 或 1。我希望输出按原样显示。 使用 bool 数组将其指定为 TRUE 或 FALSE,这是我不喜欢的。 有没有优化(内存和速度)的方法来做到这一点?
Sub ArrayPasting()
Dim byteArray(1 To 3) As Byte
Dim intArray(1 To 3) As Integer
For i = 1 To 3
byteArray(i) = i
intArray(i) = 2 * i
Next i
ActiveSheet.Range(Cells(1, 1), Cells(1, 3)).Value = intArray 'range populated with intArray
ActiveSheet.Range(Cells(2, 1), Cells(2, 3)).Value = byteArray 'error
End Sub
最佳答案
假设我们有一个非常大的 bool 数组,我们想要:
- 转储到单元格
- 转换为 1/0 (其中 TRUE 为 1)
然后是这样的:
Sub SayBoo()
Dim Boo(1 To 2, 1 To 2) As Boolean
Dim r As Range
Set r = Range("A1:B2")
Boo(1, 1) = True
Boo(1, 2) = True
Boo(2, 1) = False
Boo(2, 2) = False
r = Boo
With r
.Value = Evaluate("=IF(" & .Address & ",1,0)")
End With
End Sub
会做的。
关于arrays - 在Excel VBA中将字节数组写入范围而不循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51380513/