ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Function To Combine two 3-D arrays (https://www.excelbanter.com/excel-programming/403379-function-combine-two-3-d-arrays.html)

Darren Hill

Function To Combine two 3-D arrays
 

I have a function to combine two 3d arrays. Is there a more efficient
way to do this than the code below?
Note: there's a complication:
The 3rd dimension includes a price. When combining the arrays, if the
1st and 2nd dimension in both arrays match, and only then, the 3rd
dimensions are added together.

Thanks,
Darren

Function Combine3DArrays(arr1 As Variant, arr2 As Variant) As Variant
Dim i As Integer, j As Integer, k As Integer
Dim arrNew As Variant
For i = LBound(arr1, 2) To UBound(arr1, 2)
For j = LBound(arr2, 2) To UBound(arr2, 2)
If arr1(1, i) = arr2(1, j) And arr1(2, i) = arr2(2, j) Then
arr1(3, i) = arr1(3, i) + arr2(3, j)
arr2(1, j) = vbNullString
arr2(2, j) = vbNullString
arr2(3, j) = 0
End If
Next j
Next i
For j = LBound(arr2, 2) To UBound(arr2, 2)
If arr2(1, j) < vbNullString Then
ReDim Preserve arr1(LBound(arr1, 2) To UBound(arr1, 2) + 1)
arr1(1, UBound(arr1, 2)) = arr2(1, j)
arr1(2, UBound(arr1, 2)) = arr2(2, j)
arr1(3, UBound(arr1, 2)) = arr2(3, j)
End If
Next j
Combine3DArrays = arr1
End Function

Alan Beban[_2_]

Function To Combine two 3-D arrays
 
Darren Hill wrote:

I have a function to combine two 3d arrays. Is there a more efficient
way to do this than the code below?
Note: there's a complication:
The 3rd dimension includes a price. When combining the arrays, if the
1st and 2nd dimension in both arrays match, and only then, the 3rd
dimensions are added together.

Thanks,
Darren

Function Combine3DArrays(arr1 As Variant, arr2 As Variant) As Variant
Dim i As Integer, j As Integer, k As Integer
Dim arrNew As Variant
For i = LBound(arr1, 2) To UBound(arr1, 2)
For j = LBound(arr2, 2) To UBound(arr2, 2)
If arr1(1, i) = arr2(1, j) And arr1(2, i) = arr2(2, j) Then
arr1(3, i) = arr1(3, i) + arr2(3, j)
arr2(1, j) = vbNullString
arr2(2, j) = vbNullString
arr2(3, j) = 0
End If
Next j
Next i
For j = LBound(arr2, 2) To UBound(arr2, 2)
If arr2(1, j) < vbNullString Then
ReDim Preserve arr1(LBound(arr1, 2) To UBound(arr1, 2) + 1)
arr1(1, UBound(arr1, 2)) = arr2(1, j)
arr1(2, UBound(arr1, 2)) = arr2(2, j)
arr1(3, UBound(arr1, 2)) = arr2(3, j)
End If
Next j
Combine3DArrays = arr1
End Function


The above doesn't seem to have anything to do with 3-d arrays, only 2-D;
no reference to an array element includes 3 index numbers. Why is the
variable k declared? It is not used. Why is the variable ArrNew
declared? It is not used.

What's up???

Alan Beban

Darren Hill

Function To Combine two 3-D arrays
 
Alan Beban wrote:
Darren Hill wrote:

I have a function to combine two 3d arrays. Is there a more efficient
way to do this than the code below?
Note: there's a complication:
The 3rd dimension includes a price. When combining the arrays, if the
1st and 2nd dimension in both arrays match, and only then, the 3rd
dimensions are added together.

Thanks,
Darren

Function Combine3DArrays(arr1 As Variant, arr2 As Variant) As Variant
Dim i As Integer, j As Integer, k As Integer
Dim arrNew As Variant
For i = LBound(arr1, 2) To UBound(arr1, 2)
For j = LBound(arr2, 2) To UBound(arr2, 2)
If arr1(1, i) = arr2(1, j) And arr1(2, i) = arr2(2, j) Then
arr1(3, i) = arr1(3, i) + arr2(3, j)
arr2(1, j) = vbNullString
arr2(2, j) = vbNullString
arr2(3, j) = 0
End If
Next j
Next i
For j = LBound(arr2, 2) To UBound(arr2, 2)
If arr2(1, j) < vbNullString Then
ReDim Preserve arr1(LBound(arr1, 2) To UBound(arr1, 2) + 1)
arr1(1, UBound(arr1, 2)) = arr2(1, j)
arr1(2, UBound(arr1, 2)) = arr2(2, j)
arr1(3, UBound(arr1, 2)) = arr2(3, j)
End If
Next j
Combine3DArrays = arr1
End Function


The above doesn't seem to have anything to do with 3-d arrays, only 2-D;
no reference to an array element includes 3 index numbers. Why is the
variable k declared? It is not used. Why is the variable ArrNew
declared? It is not used.

What's up???

Alan Beban


Oops, you're right: it's a 2D array with three elements in the first
array. That'll teach me to post when I'm suffering from
looking-at-code-too-long fatigue :)

The k variable and arrnew are there because I originally planned to move
the two arrays into a third array and thought I might need them. Then I
realised I could stick with the original arr1. I should have removed them.

Darren


All times are GMT +1. The time now is 07:53 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com