jueves, 18 de febrero de 2016

VBA: Matrices y Colecciones en nuestras macros.

Se me planteaba la siguiente cuestión:
tengo un problema y no se como hacerlo, ya que recién estoy empezando a programar, mi problema es el siguiente:
tengo varias celdas con textos separados por comas, el cual me piden que ordene por filas quedando de esta forma.
texto1: casa, habitaciones, edificio, oficinas
texto2: licuadora, frutas, molino , grano,fiesta patrias, bandera

casa habitaciones
edificio oficinas
licuadora frutas
molino grano
fiestas patrias
bandera


La idea es, por tanto, listar todos los elementos de los diferentes textos o celdas, en pares de elementos...

VBA: Matrices y Colecciones en nuestras macros.



Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de la ventana de código de un módulo estándar desde el editor de VB:

Sub Separar_Pares()
Dim matriz() As String
Dim MatrizFinal() As String
Dim coleccion As New Collection
Set Rng = Range("A1:A2")

'recorremos cada celda del rango...
For Each celda In Rng
    'construimos una matriz con los elementos separados por comas
    'en cada celda
    matriz = Split(Trim(celda), ",")
    'cada elemento lo añadimos a una Collection
    For item = 0 To UBound(matriz)
        coleccion.Add Trim(matriz(item))
    Next item
Next celda

'pasamos por todos los elementos cargados en la Collection
Dim num As Long
'controlamos que haya un número par de elementos...
'en caso contrario añadimos uno en blanco.
If coleccion.Count Mod 2 <> 0 Then
    coleccion.Add ""
End If
'Preparamos una última matriz con los pares cargados
num = Int(coleccion.Count / 2)
ReDim MatrizFinal(1 To num) As String

'y procedemos a la carga de la matrizFinal
x = 1
For m = 1 To coleccion.Count Step 2
    MatrizFinal(x) = coleccion(m) & " " & coleccion(m + 1)
    x = x + 1
Next m

'Retornamos los pares a la Hoja de cálculo
Range("C1:C" & num).Value = Application.Transpose(MatrizFinal)

End Sub



El trabajo ha consistido en, tal y como se explica en el paso a paso, generar una matriz o Array con los diferentes elementos de cada celda (Array llamada 'matriz').
A continuación, como parte del mismo bucle se ha generado una Collection con los elementos individuales de cada matriz anterior ('coleccion').

Finalmente, uniendo a pares los elementos individuales de nuestro Collection, cargando los datos en una última Array: 'MatrizFinal'.. para finalmente volcar todos sus elementos en la columna C de la hoja...

No hay comentarios:

Publicar un comentario en la entrada