6 febrero, 2025

EJEMPLO PRÁCTICO DE AUTOMATIZACIÓN EN EXCEL CON VBA

Hola a todos:

Es muy habitual que cuando nos encontramos con archivos que han sido confeccionados en Excel sin la intención de ser automatizados en un futuro, sea muy difícil poder trabajar con ellos y explotar la información convenientemente.

Esto le pasó a un lector de mi web que envió su problema en una consulta bastante larga y de la que únicamente voy a mostrar la parte más compleja.

Imaginad que tenéis esta estructura en una celda:

6-180;2-127;6-131;9-149;9-179;10-170;2-120;2-107;8-171;8-199;5-167;3-142;10-138

Previamente he eliminado los espacios que existían entre y reemplazado algunas comas por puntos y comas, dado que la información se introducía a mano.

Ahora que tenemos la información estandarizada, lo que se pide es:

  • Los datos serán delimitados para su análisis por el punto y coma.
  • Extraer el número después del guion siempre que el número antes del guion sea mayor de 5.
  • Los datos se mostrarán en las celdas de la derecha, cada número en una celda independiente.

Es decir, el resultado será este:

180131149179170171199138

Para hacerlo he programado el siguiente código:

Sub EXTRACCION()
    'Declaramos variables
    Dim Fin         As Long, i As Long, j As Long
    Dim Celda       As Variant, MiCadena As String
    Dim Matriz      As Variant, MiArray As Variant
    'Con la Hoja1
    With Sheets("Hoja1")
        Fin = Application.CountA(.Range("A:A"))
        'Recorremos filas
        For i = 2 To Fin
            'Recorremos cada elemento separado por ";" de cada celda
            For Each Celda In Split(.Cells(i, 1), ";")
                'Si el dato comienza por un número mayor de 5, extraemos el número después del guión.
                If Split(Celda, "-")(0) > 5 Then MiCadena = Trim(MiCadena) & " " & Split(Celda, "-")(1)
            Next Celda
            'Pasamos la cadena a una matriz y devolvemos los datos en celdas independientes
            Matriz = Split(MiCadena, " ")
            ReDim MiArray(0 To UBound(Matriz))
            For j = 0 To UBound(Matriz)
                Cells(i, j + 2) = Matriz(j)
            Next j
            MiCadena = vbNullString
        Next i
    End With
End Sub

Ejecutando la rutina este será el resultado:

Aunque el ejercicio era más extenso, podéis observar cómo con VBA podemos transformar la información y disponerla para su futuro procesamiento.

Como ya comentado, previamente eliminé espacios en blanco y caracteres extraños dentro de la misma celda y reemplacé comas y puntos por punto y coma. Esto lo podéis hacer con VBA o directamente con la herramienta de reemplazar de la cinta de opciones.

Y esto es todo, espero que os sea de utilidad!.

Descarga el archivo de ejemplo pulsando en:

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

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