嘿大家:我正在尝试创建一个挖掘数组的函数,并在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)