Arrays 将字节数组写入Excel VBA中的某个范围而不循环
我试图直接将数组转储到工作表中,而不进行循环。这适用于除“字节”数组之外的所有数据类型。为什么会这样 我想使用字节数组,以节省内存成本(数据通常超过2GB excel限制)。虽然我通过划分块来解决这个问题,但我想了解为什么字节数组不能直接转储到一个范围中 编辑1: 数组值为0或1。我希望输出按原样显示。 使用布尔数组可以得到TRUE或FALSE,这是我不喜欢的。 有没有优化(内存和速度)的方法Arrays 将字节数组写入Excel VBA中的某个范围而不循环,arrays,vba,excel,Arrays,Vba,Excel,我试图直接将数组转储到工作表中,而不进行循环。这适用于除“字节”数组之外的所有数据类型。为什么会这样 我想使用字节数组,以节省内存成本(数据通常超过2GB excel限制)。虽然我通过划分块来解决这个问题,但我想了解为什么字节数组不能直接转储到一个范围中 编辑1: 数组值为0或1。我希望输出按原样显示。 使用布尔数组可以得到TRUE或FALSE,这是我不喜欢的。 有没有优化(内存和速度)的方法 Sub ArrayPasting() Dim byteArray(1 To 3) As By
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
您可以使用Application.transpose(在本例中):
不能在Excel中直接存储二进制数组值。您必须将其转换为Excel可接受的格式。将数组值编码为base-64字符串。然后可以将其存储在Excel单元格中 如果您真的需要在Excel中存储二进制数据(这有点滥用Excel。Excel不是为二进制数据存储而创建的),您需要:
假设我们有一个非常大的布尔数组,我们想要:
- 倒进牢房
- 转换为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
可以。字节数组通常用于二进制数据,这些数据不能表示为可打印文本,因此不能像其他类型一样处理,因为它们总是有可读的表示形式。“为了节省内存成本”可能需要一些澄清。@AlexK。“为了节省内存成本”-使用字节数组将比使用整数消耗更少的内存空间。通过这种方式,我可以减少必须处理和转储的块的数量,从而提高速度。
将文本分割成更小的块,并将每个块存储在单独的单元格中
——这涉及循环,但OP要求不使用循环。这是一种很好的方法。但这需要两倍的时间(转储+重新写入)。@Surya你是对的。潜在的节省是大阵列的内存存储,而不是执行速度。
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