gpt4 book ai didi

arrays - VBA (Excel) 初始化整个数组而不循环

转载 作者:行者123 更新时间:2023-12-01 16:37:00 25 4
gpt4 key购买 nike

我对 VBA 相当陌生,所以这可能是一个简单的问题,但这里是。

我想在 VBA 中初始化整个数组 myArray,例如整数。我知道我可以通过简单的初始化来做到这一点,如下所示:

Dim myArray
myArray = Array(1, 2, 4, 8)

但是如果数组很大,这很麻烦,我想将所有元素初始化为相同的值。理想情况下,它应该是这样的:

myArray(:) = 0

我尝试过,但编译器提示。然后我尝试了 myArray() = 0 它也提示了这一点。

谁能解释一下如何做到这一点,不循环?如果可能的话,我想在一份声明中做到这一点。

澄清:

我想将数组的每个元素初始化为某个初始值。因此,例如,如果我有一个包含 300 个整数的数组 Dim myArray(300) As Integer,则所有 300 个元素都将保留相同的初始值(例如数字 13)。

更多说明

我找到了this answer这表明您可以使用如下变量来执行此操作:

Dim x As Double: x = 0

也许有一种方法可以稍微更新语法以使其适用于数组?

最佳答案

这很简单,至少如果您想要一个基于 1 的一维或二维变体数组:

Sub StuffVArr()
Dim v() As Variant
Dim q() As Variant
v = Evaluate("=IF(ISERROR(A1:K1), 13, 13)")
q = Evaluate("=IF(ISERROR(A1:G48), 13, 13)")
End Sub

字节数组也不错:

Private Declare Sub FillMemory Lib "kernel32" Alias "RtlFillMemory" _
(dest As Any, ByVal size As Long, ByVal fill As Byte)

Sub StuffBArr()
Dim i(0 To 39) As Byte
Dim j(1 To 2, 5 To 29, 2 To 6) As Byte
FillMemory i(0), 40, 13
FillMemory j(1, 5, 2), 2 * 25 * 5, 13
End Sub

您可以使用相同的方法填充其他数字数据类型的数组,但仅限于可以用单个重复字节表示的值:

Sub StuffNArrs()
Dim i(0 To 4) As Long
Dim j(0 To 4) As Integer
Dim u(0 To 4) As Currency
Dim f(0 To 4) As Single
Dim g(0 To 4) As Double

FillMemory i(0), 5 * LenB(i(0)), &HFF 'gives -1
FillMemory i(0), 5 * LenB(i(0)), &H80 'gives -2139062144
FillMemory i(0), 5 * LenB(i(0)), &H7F 'gives 2139062143

FillMemory j(0), 5 * LenB(j(0)), &HFF 'gives -1

FillMemory u(0), 5 * LenB(u(0)), &HFF 'gives -0.0001

FillMemory f(0), 5 * LenB(f(0)), &HFF 'gives -1.#QNAN
FillMemory f(0), 5 * LenB(f(0)), &H80 'gives -1.18e-38
FillMemory f(0), 5 * LenB(f(0)), &H7F 'gives 3.40e+38

FillMemory g(0), 5 * LenB(g(0)), &HFF 'gives -1.#QNAN
End Sub

如果你想避免在其他情况下出现循环,情况会变得更加复杂。除非您的数组有 50K 条目或更大,否则不太值得。只需在循环中设置每个值,您就会足够快,正如我在 earlier answer 中谈到的那样。 .

关于arrays - VBA (Excel) 初始化整个数组而不循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19336987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com