Arrays 将范围传递给Excel用户定义函数并将其分配给数组
我正在努力Arrays 将范围传递给Excel用户定义函数并将其分配给数组,arrays,excel,range,user-defined-functions,vba,Arrays,Excel,Range,User Defined Functions,Vba,我正在努力 将两个范围(多行单列)传递给Excel 2007中的用户定义函数 然后将其分配给一个数组进行处理 有人能告诉我如何将这样的范围分配给数组吗 范围不是恒定的,因为我在不同的单元格中为不同的数据使用UDF,所以我不能使用例如,range(“A1:A10”) 当我只使用Data1.Rows.Cells(I,1)而不是数组时,代码正在工作。但我认为为了提高效率,最好使用一维数组 这是我目前的代码 Function Sample(Data1 As Range, Data2 As Range)
range(“A1:A10”)
当我只使用Data1.Rows.Cells(I,1)
而不是数组时,代码正在工作。但我认为为了提高效率,最好使用一维数组
这是我目前的代码
Function Sample(Data1 As Range, Data2 As Range) As Double
'Size of Data1 and Data2
Dim rows As Integer
rows = Data1.Rows.Count
'Declaring two one dimensional arrays
Dim data1Array(rows) As Double --- Getting error here
Dim data2Array(rows) As Double --- Getting error here
Dim diff As Double
Dim average As Double
Dim i As Integer
'Assigning Range to Array
data1Array = Data1 --- Getting Error here
data2Array = Data2 --- Getting Error here
average = 0
diff = 0
For i = 1 To rows
diff = data1Array(i) - data2Array(i)
If diff < 0 Then
diff = diff * -1
End If
average = diff + average
Next i
Sample = average/rows
End Function
函数示例(数据1作为范围,数据2作为范围)作为双精度
'数据1和数据2的大小
将行设置为整数
rows=Data1.rows.Count
'声明两个一维数组
将data1Array(行)变暗为双精度--此处获取错误
将data2Array(行)变暗为Double--此处获取错误
Dim diff为双精度
将平均值调整为双精度
作为整数的Dim i
'将范围分配给数组
data1Array=Data1---此处获取错误
data2Array=Data2---此处获取错误
平均值=0
差异=0
对于i=1到行
差异=数据1阵列(i)-数据2阵列(i)
如果差值<0,则
差异=差异*-1
如果结束
平均值=差异+平均值
接下来我
样本=平均值/行数
端函数
类似这样的东西可以用于1D范围,包括测试
Sub Test()
MsgBox Sample([a1:a3], [a5:a7])
End Sub
功能
Function Sample(Data1 As Range, Data2 As Range)
Dim X
Dim Y
Dim lngCnt As Long
Dim dbDiff As Double
Dim dbAvg As Double
If Data1.rows.Count <> Data2.rows.Count Then
Sample = "Different range sizes"
Exit Function
ElseIf Data1.rows.Count = 1 Then
Sample = "Single cell range"
Exit Function
End If
X = Application.Transpose(Data1)
Y = Application.Transpose(Data2)
For lngCnt = 1 To UBound(X)
dbDiff = X(lngCnt) - Y(lngCnt)
If dbDiff < 0 Then
dbDiff = dbDiff * -1
End If
dbAvg = dbDiff + dbAvg
Next
Sample = dbAvg / lngCnt
End Function
函数示例(数据1作为范围,数据2作为范围)
暗X
暗淡的
暗长
Dim-dbDiff为双精度
将dbAvg设置为双精度
如果Data1.rows.Count Data2.rows.Count,则
示例=“不同的范围大小”
退出功能
ElseIf Data1.rows.Count=1,则
Sample=“单个单元格范围”
退出功能
如果结束
X=应用程序转置(数据1)
Y=应用程序转置(数据2)
对于lngCnt=1至UBound(X)
dbDiff=X(lngCnt)-Y(lngCnt)
如果dbDiff<0,则
dbDiff=dbDiff*-1
如果结束
dbAvg=dbDiff+dbAvg
下一个
样本=dbAvg/lngCnt
端函数
将Data1Array和Data2Array声明为变体(否则将无法为其分配范围)。感谢您的更正,第二个错误消失了。但第一个仍然存在。现在我可以访问Data1Array中的数据,但是可以通过像Data1Array(I,1)这样的两个维度来访问。它可以像这样的Data1Array(i)即一维吗?首先,不要使用行
作为变量名-这是Excel VBA中的关键词…用以下方式声明数组变量:将Data1Array变为变量
。当调用linedata1Array=Data1
时,将自动设置数组的维度。@MrA2Z-是<代码>应用程序。转置可以强制将单行或单列2D变量转换为1D。请参见下文,我如何创建接受范围数组的函数?