20 octubre, 2021

UTILIZANDO MÉTODO RANGE.FIND PARA LOCALIZAR COLUMNA Y FORMATEAR DATOS

Hola a todos,

Como sabéis, es muy habitual que cuando trabajamos con datos recibamos archivos con bases de datos que de alguna forma necesitamos modificar o formatear, ya sea por nuestra comodidad, necesidad o política de empresa.

Hoy en día esto se puede resolver por varías vías, una de ellas puede ser mediante Power Query, importando esa base de datos y exportando la información que necesitamos después de haber indicado las columnas que necesitamos y de haber aplicado las funciones requeridas para obtener el nuevo resultado.

Y otra forma es mediante VBA programando código que realice lo requerido.

Nos ocuparemos hoy de VBA y vamos a tener presente que esta tarea se puede realizar con métodos distintos. Para el caso de hoy lo haré con un loop que recorra cada columna registro por registro y copie los datos de una hoja a la otra.

Partiendo de esta base:

Pasaremos a otra hoja los campos ID, EDAD Y SEXO. Para la EDAD codificaremos por tramos y para SEXO, cambiaremos el título por GENERO y HOMBRE Y MUJER por MASCULINO Y FEMENINO.

Las modificaciones son lo de menos, lo importante cómo utilizaremos el método find para capturar el número de la columnas y facilitar así modificaciones posteriores en la base de datos cuando se incluyan nuevas columnas.

El código a utilizar es el siguiente:

Sub FORMATEO()
    'Declaramos variables
    Dim nTitulo     As Object, i As Long, nCampo As Object
    Dim Fin         As Long,  col As Long
    With Sheets("ORIGINAL")
        Set nTitulo = .Range("1:1")
        Fin = Application.CountA(Sheets("ORIGINAL").Range("A:A"))
        For i = 2 To Fin
            ' Traemos campo ID
            Set nCampo = nTitulo.Find("ID", LookAt:=xlWhole)
            col = nCampo.Column
            Sheets("FORMATEADA").Cells(1, 1) = nCampo
            Sheets("FORMATEADA").Cells(i, 1) = .Cells(i, col)
            'Agrupamos edad
            Set nCampo = nTitulo.Find("EDAD", LookAt:=xlWhole)
            col = nCampo.Column
            Sheets("FORMATEADA").Cells(1, 2) = nCampo
            Select Case .Cells(i, col)
                Case 18 To 25
                    Sheets("FORMATEADA").Cells(i, 2) = "18 a 25"
                Case 26 To 35
                    Sheets("FORMATEADA").Cells(i, 2) = "26 a 35"
                Case 36 To 45
                    Sheets("FORMATEADA").Cells(i, 2) = "36 a 45"
                Case 46 To 55
                    Sheets("FORMATEADA").Cells(i, 2) = "46 a 55"
                Case 56 To 65
                    Sheets("FORMATEADA").Cells(i, 2) = "56 a 65"
            End Select
            'Renombramos sexo por género
            Set nCampo = nTitulo.Find("SEXO", LookAt:=xlWhole)
            col = nCampo.Column
            Sheets("FORMATEADA").Cells(1, 3) = "GENERO"
            If .Cells(i, col) = "HOMBRE" Then
                Sheets("FORMATEADA").Cells(i, 3) = "MASCULINO"
            Else
                Sheets("FORMATEADA").Cells(i, 3) = "FEMENINO"
            End If
        Next i
    End With
    Sheets("FORMATEADA").Select
End Sub

Con esta sencilla sentencia obtenemos la columna en la que se encuentra el campo que hemos indicado. Importante, para búsquedas exactas utilizar «LookAt:=xlWhole»

Set nCampo = nTitulo.Find("ID", LookAt:=xlWhole)
            col = nCampo.Column

El resultado de este código es el siguiente:

A pesar de que podemos encontrar fórmulas más rápidas, en mi opinión debemos tener muy en cuenta las posibilidades que ofrece este método. Os dejo la base de datos:

🙂

¿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