View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
[email protected] bplumhoff@gmail.com is offline
external usenet poster
 
Posts: 136
Default A hard one for manipulating arrays

Hi Jon,

Good idea but since Albert uses a global variable he would have to
copy/save the result array in each pass.

I suggest:

Option Explicit

Public RegistrosExistentes() As Variant
Public Const TotalFields = 2
Sub ConstruirArrayRegistrosExistentes(ParamArray vArr())
Dim i As Long, j As Long, k As Long
Dim vE As Variant

i = 0
For Each vE In vArr
i = i + UBound(vE, 1)
Next vE
ReDim RegistrosExistentes(1 To i, 1 To TotalFields)

i = 0
For Each vE In vArr
For j = 1 To UBound(vE, 1)
i = i + 1
For k = 1 To TotalFields
RegistrosExistentes(i, k) = vE(j, k)
Next k
Next j
Next vE
End Sub

Sub Test()
Dim vA(1 To 3, 2) As Variant
Dim vB(1 To 4, 2) As Variant
Dim vC(1 To 5, 2) As Variant
Dim i As Long, j As Long

vA(1, 1) = 11
vA(1, 2) = 12
vA(2, 1) = 21
vA(2, 2) = 22
vA(3, 1) = 31
vA(3, 2) = 32

vB(1, 1) = 41
vB(1, 2) = 42
vB(2, 1) = 51
vB(2, 2) = 52
vB(3, 1) = 61
vB(3, 2) = 62
vB(4, 1) = 71
vB(4, 2) = 72

vC(1, 1) = 81
vC(1, 2) = 82
vC(2, 1) = 91
vC(2, 2) = 92
vC(3, 1) = 101
vC(3, 2) = 102
vC(4, 1) = 111
vC(4, 2) = 112
vC(5, 1) = 121
vC(5, 2) = 122

Call ConstruirArrayRegistrosExistentes(vA, vB, vC)

For i = 1 To UBound(RegistrosExistentes, 1)
For j = 1 To UBound(RegistrosExistentes, 2)
Debug.Print RegistrosExistentes(i, j);
Next j
Debug.Print
Next i

End Sub

Albert, set Totalfields to 13 again after testing.

Regards,
Bernd