Este post es una forma de
dar respuesta a un tema que quedó pendiente para mí, que era pasar una matriz
1D de 20 elementos, a otra matriz 2D de tamaño 5 x 4 ( 1 to 5, 1 to 4), donde visualizamos la
composición de un campeonato de futbol, con 6 equipos, obteniendo 5 jornadas de
grupos, con el numero de jornada y 3 parejas (o partidos)
Ejemplo de elementos para
la primera jornada: 1 ab
cd ef (4 elementos)
Este procedimiento que pego a continuación, se intenta dar una respuesta, y he tomado como ejemplo un caso más simple, con 4 equipos, y tres
jornadas para sus emparejamientos (6 parejas)
El objetivo, entonces es: Combinar tres matrices 1D en una matriz 2D.
Private Sub
CombinarArr1d_Arr2d_Click()
‘ dividimos una matriz 1D en
tres partes, y luego combinamos las tres matrices en otra matriz 2D
Dim miArray() As String
ReDim miArray(1 To 9)
miArray(1) = "1"
miArray(2) = "ab"
miArray(3) = "cd"
miArray(4) = "2"
miArray(5) = "ac"
miArray(6) = "bd"
miArray(7) = "3"
miArray(8) = "ad"
miArray(9) =
"bc"
'dividimos la matriz en
tres partes, de tres elementos cada una
Dim nelem As Integer
nelem = 3
Dim arr1() As String
Dim arr2() As String
Dim arr3() As String
ReDim arr1(1 To 3)
ReDim arr2(1 To 3)
ReDim arr3(1 To 3)
For i = 1 To nelem
arr1(i) = miArray(i)
Next i
For j = 1 To nelem
arr2(j) = miArray(nelem + j)
Next j
For k = 1 To nelem
arr3(k) = miArray(nelem * 2 +
k)
Next k
'vemos las tres matrices
For n = 1 To 3
ms1 = ms1 & arr1(n) &
vbTab
Next n
MsgBox ms1, ,
"valores en primera matriz"
'obtenemos: 1 ab cd
For n = 1 To 3
ms2 = ms2 & arr2(n) &
vbTab
Next n
MsgBox ms2, ,
"valores en segunda matriz"
'obtenemos: 2 ac bd
For n = 1 To 3
ms3 = ms3 & arr3(n) &
vbTab
Next n
MsgBox ms3, ,
"valores en tercera matriz"
'obtenemos: 3 ad bc
'pasamos las tres matrices
a una matriz 2d
'asignamos las variables
de filas y columnas
ifilas = 3
icolumnas = 3
Dim arrayfinal() As String
ReDim arrayfinal(1 To 3, 1 To 3)
For iFila = 1 To ifilas
For jcol = 1 To icolumnas
If iFila = 1 Then
arrayfinal(iFila, jcol)
= arr1(jcol)
End If
If iFila = 2 Then
arrayfinal(iFila, jcol)
= arr2(jcol)
End If
If iFila = 3 Then
arrayfinal(iFila, jcol)
= arr3(jcol)
End If
Next jcol
Next iFila
'mostramos los resultados
For x = 1 To ifilas
For y = 1 To icolumnas
ms = ms & arrayfinal(x,
y) & vbTab
Next y
ms = ms & vbNewLine
Next x
MsgBox ms, ,
"resultado final, obtenemos una matriz 2d"
'obtenemos : 1
ab cd
' 2 ac bd
'
3 ad bc
End Sub
El procedimiento funciona
bien y obtiene el resultado deseado, pero quería plantear la siguiente cuestión
:
1.- he utilizado una forma
de pasar las tres matrices 1d a la matriz final 2d que es muy simple porque
sólo hay tres matrices, o sea tres filas para la matriz final. Para ello
utilizo tres IF … ENDIF, uno por cada matriz.
¿ existe otra forma de
hacerlo, y que sea aplicable para indeterminadas matrices 1d, es decir para n
matrices 1d?
Saludos a todos,
Adrian.