Excel VBA:神秘的零被添加到使用"For"循环创建的数组

1 arrays excel vba for-loop

嘿大家:我正在尝试创建一个挖掘数组的函数,并在range1的相应值等于criteria1时添加range2中的值.

我对VBA比较陌生,所以它不是世界上最优雅的功能,但这是我的代码:

Function SingleArray(range1 As Range, range2 As Range, criteria1 As String)

Dim newrange() As Double
Dim d As Integer
Dim g As Integer
Dim i As Integer

g = Application.WorksheetFunction.CountIf(range1, criteria1)

ReDim newrange(g)

d = 1

For i = 0 To (range1.Count)
    If range1(i) = criteria1 Then
        newrange(d) = range2.Item(i).Value
        d = d + 1
        End If
    Next i


SingleArray = newrange

End Function
Run Code Online (Sandbox Code Playgroud)

这是我的数据样本:

range2  range1
-5000   Bob
-5000   Jim 
 200    Bob 
 500    Jim 
 5000   Bob 
 200    Bob 
 300    Bob 
 1000   Bob
Run Code Online (Sandbox Code Playgroud)

当我将条件设置为"Bob"时,返回的数组如下:

{0,-5000,200,5000,200,300,1000}
Run Code Online (Sandbox Code Playgroud)

我真的不知道那零是如何在那里制造它的.您可以提供的任何想法都是最受欢迎的!

小智 5

1-D阵列默认为从零开始的索引结构(例如0,1,2,3 ......).您使用基于一个索引(例如1,2,3,4,...)循环遍历范围.

当你声明ReDim newrange(5)实际上是在创建一个包含六个元素的数组时,不是五个(例如0,1,2,3,4,5)

通过将此编译器指令放在代码表的顶部,可以使该代码表上的所有数组默认为基于一个索引.

Option Base 1
Run Code Online (Sandbox Code Playgroud)

您还可以通过指定下边界和上边界来更改数组的动态声明方式.

ReDim newrange(1 to g)
Run Code Online (Sandbox Code Playgroud)