1/4/12

Automatizando Correcciones de Datos en Microsoft Excel 2010

Que Microsoft Excel es la mejor herramienta para que un usuario manipule datos no tenemos ninguna duda, pero cuando debemos utilizar esos datos ingresados o copiados en una planilla para importar los datos a nuestras aplicaciones, solemos encontrarnos con que el formato o los contenidos no son lo que necesitamos.

Es así, que habitualmente cuando necesitamos realizar esa tarea, pasamos un buen rato formateando y copiando celdas, y agregando fórmulas que concatenen valores, o los modifiquen en ciertas condiciones.

Esta semana analizando esta tarea con Mauricio Gayol del equipo de Soporte de ZetaConsulting nos propusimos optimizar nuestros tiempos, y automatizar estas tareas mediante la creación de Macros en VBA (Visual Basic for Applications) dentro de Microsoft Excel, así que compartimos nuestra experiencia convencidos que a muchos les podrá ser de utilidad.

Creando Macros


1. Crear la Planilla.

Comenzaremos ingresando a un nuevo Libro de Microsoft Excel.

Lo interesante de las Macros de Microsoft Excel, es que pueden crearse en una Planilla totalmente independiente y ejecutar para otra Planilla en la cual tengamos los datos a corregir. De esta manera, no tendremos que copiar la Macro en cada una de las Planillas, ya que al ejecutar, Microsoft Excel nos mostrará las Macros existentes en todas las Planillas abiertas en ese momento.

2. Creando la Macro.

Presionaremos la tecla ALT+F8, para acceder a Macros, lo cual también podemos hacer desde la barra de herramientas Programador, la cual si no esta visible, deben habilitarla desde Archivo / Opciones / Personalizar cinta de opciones, y marcar la cinta Programador.

Al abrirse el cuadro de diálogo Macros, escribiremos el nombre de la Macro a crear, pudiéndose en una misma planilla, crear todas las Macros que necesiten, en mi ejemplo escribí ValidarContactos, y luego deben presionar el botón Crear.

3. Escribiendo la Macro

Al crearse la Macro, Microsoft Excel abrirá el Diseñador de VBA, pero aquí si no son usuarios expertos, no deberán asustarse, ya que sólo deberán copiar y modificar el ejemplo.

Los siguientes ejemplos, siempre deberán escribirse o copiarse, entre el Inicio de la Macro (Sub) y el Fin de la Macro (EndSub): 

Sub ValidarContactos() 


EndSub

Ejemplos de Macros


1. Formateando Celdas como Texto

El primer ejemplo que queremos compartir es el de darle a las Celdas de una Columna el Formato Texto, ya que teníamos valores Numéricos pero algunos comenzaban con 0, por lo tanto Microsoft Excel formateaba automáticamente como Número, y esto generaba que se ignoren los 0 a la izquierda. Como en nuestro caso se trataba de la información del Código del Contacto, necesitábamos que los 0 a la izquierda se respetaran.

La Macro a continuación muestra, como recorrer todas las Filas de la Columna Código hasta encontrarse con una Celda que se encuentre vacía, y cambiar el contenido de la Celda agregándole comillas simple ( ' ) al inicio para que Microsoft Excel la considere con contenido Texto y no Numérico.

   'Seleccionamos la Celda de la Columna A y Fila 2. Primer Fila para la Columna Código del Contacto.
    Range("A2").Select
    'Mientras la Celda Activa no este vacía.
    Do While Not IsEmpty(ActiveCell)
        'Se le agrega una comillas simple al contenido de la Celda.
        ActiveCell.Value = "'" + Trim(CStr(ActiveCell.Value))
        'Se selecciona la Fila siguiente en la misma Columna.
        ActiveCell.Offset(1, 0).Select
    Loop

2. Completando Celdas vacías con Valores de otra Celda

El segundo ejemplo muestra como completar celdas vacías con el contenido de otra celda, en nuestro caso cuando la Razón Social del Contacto se encuentra vacía, debemos asumir el Nombre del Contacto.

Con lo cual el objetivo de esta Macro es recorrer todas las Filas de la Columna Nombre hasta encontrarse con una Celda que se encuentre vacía, y verificar si la Columna de la derecha para la misma Fila se encuentra vacía, caso en el cual reemplazamos con el contenido de la Columna Nombre.


   'Seleccionamos la Celda de la Columna B y Fila 2. Primer Fila para la Columna Nombre del Contacto.
    Range("B2").Select
    'Mientras la Celda Activa no este vacía.
    Do While Not IsEmpty(ActiveCell)
       'Si la Celda de la Columna a la Derecha esta Vacía.
        If IsEmpty(ActiveCell.Offset(0, 1).Value) Then
            'Se asigna a la Celda de la Columna de la Derecha, el contenido de la Celda Activa.
            ActiveCell.Offset(0, 1).Value = Trim(CStr(ActiveCell.Value))       
        End If
        'Se selecciona la Fila siguiente en la misma Columna.
        ActiveCell.Offset(1, 0).Select
    Loop 

3. Asignando Valores Predeterminados

Y en el tercer ejemplo que les dejamos hoy, veremos como asignar Valores Predeterminados a Celdas qeu se encuentran vacías, en el ejemplo correspondientes a los datos de País del Contacto y Departamento del Contacto.


   'Seleccionamos la Celda de la Columna A y Fila 2. Primer Fila para la Columna Código del Contacto.
    Range("A2").Select
    'Mientras la Celda Activa no este vacía.
    Do While Not IsEmpty(ActiveCell)


        'Si el País que se encuentra 5 Columnas a la derecha del Código es Vacío.
        If IsEmpty(ActiveCell.Offset(0, 5).Value) Then
            'Se asigna a la Celda el País Predeterminado Uruguay (UY).
            ActiveCell.Offset(0, 5).Value = "'UY"
        End If

        'Si el Departamento que se encuentra 6 Columnas a la derecha del Código es Vacío.
        If IsEmpty(ActiveCell.Offset(0, 6).Value) Then
            'Se asigna a la Celda el Departamento Predeterminado Montevideo (MO).
            ActiveCell.Offset(0, 6).Value = "'MO"
        End If

        'Se selecciona la Fila siguiente en la misma Columna
        ActiveCell.Offset(1, 0).Select
    Loop


Ejecutando la Macro


Para ejecutar la Macro, deben tener la Planilla de datos activa, y simplemente deberán presionar la tecla ALT+F8 para acceder a Macros o hacerlo desde la barra de herramientas Programador, y Microsoft Excel mostrará las Macros existentes en la Planilla destinada a las Macros, pero la ejecutará sobre los datos de la Planilla Activa al presionar el botón Ejecutar, momento en el cual Microsoft Excel se encargará de hacer la magia.

Al guardar la Planilla donde hicimos las Macros, deberán guardar ésta con la extensión XLSM (Libro de Excel habilitado para Macros).

Referencias


A continuación les dejamos una breve explicación sobre las Funciones y Objetos utilizados en los ejemplos anteriores.

Range(Rango).Select. Selecciona una Celda o Rango de Celdas dentro de la Planilla.


ActiveCell. Representa la Celda Activa dentro de la Planilla Activa de Microsoft Excel.


ActiveCell.Value. Representa el Valor de la Celda Activa.


IsEmpty(Valor). Función que retorna Verdadero si el Valor es vacío, o Falso en caso contrario.

Trim(Texto). Función que elimina los espacios a la izquierda y derecha del Texto.

CStr(Valor). Función que convierte el Valor en Texto.


ActiveCell.OffSet(Filas, Columnas). Permite acceder a partir de la Celda Activa, a otra Celda que se encuentra la cantidad de Filas y Columnas indicadas.

Esperemos que el artículo haya sido de ayuda y quedamos a disposición por cualquier inquietud o comentario.

Hasta la próxima.

1 comentario:

  1. Thanks for the marvelous posting! I certainly enjoyed reading it, you will be a great author.I
    will make sure to bookmark your blog and may come back from now on.

    I want to encourage that you continue your great writing, have a nice weekend!


    My site - What's The Average Salary Of An Optometrist

    ResponderEliminar