6 febrero, 2025

PASAR DATOS A FILAS SEGÚN ELEMENTOS ENTRE GUIONES UTILIZANDO VBA

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!!

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies