Hola a todos,
Hace unos días resolví una consulta con usando VBA, normalmente suelo acudir a Visual cuando trabajo con Excel y cuando voy a utilizar la información en procesos Online.
En este caso, la consulta consistía en generar tantas filas como códigos entre guiones existieran en la columna B; es decir, tres filas para «minerales metálicos», tres para «no metálicos», dos para «piedras preciosas», y así sucesivamente.
Para poder hacer esto, he programado el siguiente código:
Sub DividirFilasModificado()
Dim wsOrigen As Worksheet
Dim wsDestino As Worksheet
Dim ultimaFila As Long
Dim filaOrigen As Long
Dim filaDestino As Long
Dim partes As Variant
Dim i As Long
Dim columnaGuiones As Integer
'Definimos hojas de origen y destino
Set wsOrigen = ThisWorkbook.Sheets("Hoja1")
Set wsDestino = ThisWorkbook.Sheets("Hoja2")
'Limpiamos hoja de destino antes de copiar datos
wsDestino.Cells.Clear
wsDestino.Select
'Copiamos columnas 1 y 2 de la primera fila (encabezados) a hoja de destino
wsOrigen.Rows(1).Copy Destination:=wsDestino.Rows(1)
'Obtenemos última fila con datos en hoja de origen
ultimaFila = wsOrigen.Cells(wsOrigen.Rows.Count, 1).End(xlUp).Row
'Inicializamos fila de destino
filaDestino = 2
'Definimos columna con datos con guiones
columnaGuiones = 2
'Recorremos cada fila en hoja de origen desde la segunda fila
For filaOrigen = 2 To ultimaFila
'Dividimos celda con guiones en partes
partes = Split(wsOrigen.Cells(filaOrigen, columnaGuiones).Value, "-")
'Creamos nuevas filas en hoja de destino por cada parte
For i = LBound(partes) To UBound(partes)
'Copiamos columnas 1 y 2 de fila de origen a fila de destino
wsOrigen.Cells(filaOrigen, 1).Resize(, 2).Copy Destination:=wsDestino.Cells(filaDestino, 1)
'Pegamos solo parte correspondiente en columna con guiones
wsDestino.Cells(filaDestino, columnaGuiones).Value = partes(i)
'Incrementamos fila de destino
filaDestino = filaDestino + 1
Next i
Next filaOrigen
'Ajustamos ancho de columnas en hoja de destino
wsDestino.Columns.AutoFit
' Mensaje de confirmación
MsgBox "Proceso completado. Datos copiados en Hoja2.", vbInformation
End Sub
Y el resultado de ejecutar la macro es el siguiente. Qué os parece? problema resuelto!
En el próximo post voy a intentar crear el mismo ejercicio pero con Typescript (y así me quedaré a gusto) y también con Power Query 🙂
Y esto es todo, espero que sea de utilidad!!