vba是将数组中的所有值设置为相同值的更好方法

vba是将数组中的所有值设置为相同值的更好方法,vba,excel,Vba,Excel,这是个人好奇心的问题 在VBA中,如果我有一个大小为2的数组: Dim r(1) as Variant 我希望数组中的两个值都是-1。我可以这样做: r(0)=-1 r(1)=-1 或者我可以用循环遍历这两个函数,并将它们设置为-1 所以我的问题是,有没有办法不用迭代就将数组中的所有值设置为相同的值 或者,我有什么办法可以做到: r = array(-1,-1) 这可能是一个非常愚蠢的问题,但我似乎找不到答案。是的,你能做到。但是在声明数组时必须小心 范例 Option Explicit

这是个人好奇心的问题

在VBA中,如果我有一个大小为2的数组:

Dim r(1) as Variant
我希望数组中的两个值都是-1。我可以这样做:

r(0)=-1
r(1)=-1
或者我可以用循环遍历这两个函数,并将它们设置为-1

所以我的问题是,有没有办法不用迭代就将数组中的所有值设置为相同的值

或者,我有什么办法可以做到:

r = array(-1,-1)

这可能是一个非常愚蠢的问题,但我似乎找不到答案。

是的,你能做到。但是在声明数组时必须小心

范例

Option Explicit

Sub Sample()
    Dim r As Variant '<~~

    r = Array(-1, -1)

    Debug.Print r(0)
    Debug.Print r(1)
End Sub

我不太擅长画图像。但这应该让您了解并弄清楚与变量数组相关的概念


->为什么需要将数组的所有值设置为相同?@Scott,因为我将更改其中一些值,并且我希望默认值为-1。再一次,我只是好奇是否有更好的方法来做这件事,因为我可以想出更好的方法在其他语言(如matlab)中做这件事。谢谢出于好奇,为什么我不能将数组r(1)声明为数组(-1,-1)?请参见Excel帮助文件:)数组函数返回一个包含数组的变量。不能将一个数组直接分配给另一个数组。请参阅更新的帖子。+1 Array()是一个函数,而不是声明语句。它接受任意数量的项作为参数,并返回一个包含这些元素的variant类型的数组。因此,不能将r(1)声明为数组(-1,-1)。您必须将其声明为变量(即数组函数返回的数据类型)。@Alec:我对您的上一条评论感到困惑
为什么我不能将数组r(1)声明为数组(-1,-1)
。我想sid已经回答了您的问题,您不能直接将数组分配给另一个数组。这是我仍然不理解的:这两种类型的数组最终将完全相同。它们都是相同大小的“variant/variant(0到1)”类型的数组。在调试模式下,它们在watch中的外观完全相同。既然它们是相同的数据类型,为什么我不能将一个分配给另一个呢?+1表示遍历和超越:)
Option Explicit

Sub Sample()
    Dim r(1) As Variant 
    Dim s As Variant
    Dim i As Long

    s = Array(-1, -1)

    For i = LBound(r) To UBound(r)
       r(i) = s(i)
    Next

    Debug.Print r(0)
    Debug.Print r(1)
End Sub