Arrays and Strings

M

marston.gould

I'm trying to create a function that can compare all the values in a
2-D array along the first parameter of the second dimention and then,
if there is a match, add together the elements in both arrays into a
third - except for the two elements in commen, with a complication that
the last element goes into the a different element in the merged array
--- see below

Function BuildArray(a1,a2)
Dim a3(1,1)
count = 0
For i = 1 to UBound(a1,1)
For j = 1 to UBound(a2,1)
If a2(j,1) = a1(i,1) Then
count = count+1
ResizeArray a3,vcount,2
a3(vcount,1) = a1(i,1) & a1(i,2) & a2(i,2) & a2(i,3)
a3(vcount,2) = a2(i,4)
End If
Next j
Next i
End Function

The complication is that I know that the first array passed (a1) will
always have a dimension of (n,2) but the second can vary (but will
always be at least 2)...

If a2 only has 2 dimensions then I'd want
a3(vcount,1) = a1(i,1) & a1(i,2)
a3(vcount,2) = a2(i,2)

If a2 had more than 2 dimensions then I'd want
a3(vcount,1) = a1(i,1) & a1(i,2) & a2(i,2) & a2(i,n-1)
a3(vcount,2) = a2(i,n)

I'm calling this quite often and right now I have it listed out in
specific detail over and over again (roughly 25 times)
and that tells me a function might be more useful and clear.
 
A

Alan Beban

I'm trying to create a function that can compare all the values in a
2-D array along the first parameter of the second dimention and then,
if there is a match, add together the elements in both arrays into a
third - except for the two elements in commen, with a complication that
the last element goes into the a different element in the merged array
--- see below

Function BuildArray(a1,a2)
Dim a3(1,1)
count = 0
For i = 1 to UBound(a1,1)
For j = 1 to UBound(a2,1)
If a2(j,1) = a1(i,1) Then
count = count+1
ResizeArray a3,vcount,2
a3(vcount,1) = a1(i,1) & a1(i,2) & a2(i,2) & a2(i,3)
a3(vcount,2) = a2(i,4)
End If
Next j
Next i
End Function

The complication is that I know that the first array passed (a1) will
always have a dimension of (n,2) but the second can vary (but will
always be at least 2)...

If a2 only has 2 dimensions then I'd want
a3(vcount,1) = a1(i,1) & a1(i,2)
a3(vcount,2) = a2(i,2)

If a2 had more than 2 dimensions then I'd want
a3(vcount,1) = a1(i,1) & a1(i,2) & a2(i,2) & a2(i,n-1)
a3(vcount,2) = a2(i,n)

I'm calling this quite often and right now I have it listed out in
specific detail over and over again (roughly 25 times)
and that tells me a function might be more useful and clear.

I have no idea what vcount is, but you might consider something like the
following:
On Error Resume Next

'Loop until an error occurs
i = 1
Do
z = UBound(a2, i)
i = i + 1
Loop While Err = 0

'Reset the error value for use with other procedures
Err = 0

'Return the number of dimensions
k = i - 2

If k=2 then
a3(vcount,1) = a1(i,1) & a1(i,2)
a3(vcount,2) = a2(i,2)
Else
a3(vcount,1) = a1(i,1) & a1(i,2) & a2(i,2) & a2(i,k-1)
a3(vcount,2) = a2(i,k)
EndIf

Or, if you regularly have the array functions from my web site available
to your workbook, you could use k = ArrayDimensions(a2) instead of the loop.

Alan Beban
 
M

Myrna Larson

I don't follow you here:
If a2 had more than 2 dimensions then I'd want
a3(vcount,1) = a1(i,1) & a1(i,2) & a2(i,2) & a2(i,n-1)
a3(vcount,2) = a2(i,n)

The number of dimensions refers to the number of subscripts inside the
parentheses, not to the upper or lower bounds of those subscripts. In your
example, a2 is a two-dim array.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top