I am trying to
- pass two ranges - multiple rows single column - to a user defined function in Excel 2007,
- then assign it to an array for processing.
Can anybody tell me how to assign such range to an array?
The range is not constant as I am using an UDF in different cells for different data so I cannot use e,g, Range("A1:A10")
The code is working when I just use Data1.Rows.Cells(i, 1) instead of arrays. But I think it is better to use one dimensional arrays for efficiency.
Here is my current code
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
rowsas variable name- that is key word in Excel VBA...Dim data1Array as Variant. Dimension of your array will be set automatically when linedata1Array = Data1is called.Application.Transposecan force a single row or single column 2D variant into 1D. See below