viernes, 18 de julio de 2025

Estructuras de repetición en macros de Excel

Las macros de Excel tienen a disposición del usuario un conjunto de estructuras de control de código que permiten ejecutar acciones repetitivas y con ello automatizar tareas y flujos de trabajo que así lo requieren, estas estructuras son las siguientes:

  • Do While... Loop
  • For... Next
  • For Each... Next
El ciclo Do While... Loop se usa para ejecutar un bloque de sentencias un número indefinido de veces. Las sentencias se repiten mientras una condición sea verdadera o hasta que se convierta en verdadera.

La estructura For...Next se utiliza para repetir un bloque de sentencias un número específico de veces. Este bucle utilizan una variable de contador cuyo valor aumenta o disminuye con cada repetición.

El ciclo For Each... Next repite un bloque de instrucciones para cada objeto de una colección o cada elemento de una matriz. Visual Basic hace uso de una variable cada vez que se ejecuta el bucle.

Ejemplos de aplicación
A continuación se describen una serie de ejemplos en los que estos bucles pueden ser de utilidad en flujos de trabajo de Excel.

Suponiendo un caso en el que se desea realizar la limpieza de un conjunto de datos, podemos usar el ciclo For Each... Next para establecer un color de celda en aquellas que se encuentren vacías, de acuerdo a esto vamos a poder identificarlas de manera más sencilla y en consecuencia tomar una serie acciones como borrarlas o tenerlas pendientes para un posterior procesamiento de acuerdo a las necesidades del análisis. El código que describe lo descrito previamente de muestra a continuación.

Public Sub establecerColorCeldasVacias()
    Sheets("Hoja1").Select
    Dim celda As Range
    
    For Each celda In Range("A1:A38")
        If IsEmpty(celda) Then
            celda.Interior.Color = RGB(255, 164, 32) 'Se coloca un color anaranjado
        End If
    Next
End Sub

En este código definimos una variable rango para que el ciclo lo recorra y establecemos una variable llamada celda que va representar cada elemento sobre el que vamos iterando, además, usamos la propiedad Interior.Color para establecer el color de las celdas que cumplan la condición de estar vacías.

Otro caso en que los ciclos pueden ser de mucha utilidad es cuando queremos enviar datos desde una columna hacia otra, ya sea en la misma hoja o en una diferente, en este caso podemos usar el ciclo For... Next porque ya sabemos el número específico de datos que queremos enviar, en el siguiente ejemplo se copian datos en la misma hoja y desde una columna hacia otra.

Public Sub copiarDatosEntreColumnas()
    Dim i As Integer
    
    For i = 1 To 38
        Sheets("Hoja1").Cells(i, 2).Value =                        Sheets("Hoja1").Cells(i, 1).Value
    Next i
End Sub

En esta subrutina se copian los valores de celda desde la columna 1 (A) hacia la columna 2 (B), este código puede ser muy útil para conjuntos de datos cuya cantidad de registros sea muy grande. En este caso el ciclo recorre desde la primera fila hasta las número 38.

Por último, podemos hacer uso del ciclo Do While... Loop para generar un listado de fechas en un rango de celdas, esto puede se de utilidad para aplicaciones que necesiten llevar un control del día en que ocurrió un evento determinado, el ejemplo se muestra a continuación.

Public Sub generarFechas()
    Sheets("Hoja1").Select
    Dim i As Integer
    
    i = 1    
    Do While i <= 60
        Cells(i, 1).Value = Date + i - 1
        i = i + 1
    Loop
End Sub

En este caso se va iterar sobre la celda A, es por eso que se utiliza el 1 en el segundo argumento de la propiedad Cells, además, en la asignación de la fecha se va aumentar el valor del índice i al objeto Date y se le va restar un valor de uno para que la lista de fechas comience en el día actual.

Referencias
Los siguientes enlaces describen los detalles técnicos de las estructuras de Visual Basic utilizadas en este artículo.

martes, 24 de junio de 2025

El método ExportAsFixedFormat de Excel

En las macros de Excel está disponible una función para exportar las hojas y libros de Excel a formato PDF, esto puede ser muy útil para crear un reporte en este formato, o bien, para imprimir archivos con esa misma extensión, este método se llama ExportAsFixedFormat.

Convertir todo un libro de Excel a PDF
Para convertir todas las hojas de un libro de Excel en un solo archivo PDF se tiene que abrir un libro que se haya realizado y después en la pestaña Programador accedemos a la opción de Visual Basic para poder programar la macro que necesitamos, en esta macro abrimos y cerramos un procedimiento por medio de la instrucción Sub y le colocamos el nombre que deseemos, por ejemplo, le colocamos el nombre guardarComoUnSoloPDF, el código se muestra a continuación.

Public Sub guardarComoUnSoloPDF()
 'Código de programación
End Sub

Ahora, podemos declarar una variable de tipo String para almacenar la ruta en la que se va guardar el PDF, seguidamente se tiene que colocar la ruta elegida y asignarla a la variable declarada. Además, será necesario invocar al método ExportAsFixedFormat por medio del objeto ActiveWorkbook; los principales argumentos que se envían a este método son Type que indica el formato en que se va guardar el libro, FileName que es la cadena de la ruta donde se guardará el archivo, Quality que representa la calidad con la que serán guardadas las hojas de libro y OpenAfterPublish que es una bandera que se establece en True o False, este último permite mostrar o no, por pantalla, el PDF generado por medio del método ExportAsFixedFormat; todos estos argumentos se deben separar por comas. El código que realiza lo descrito previamente se muestra a continuación.

Public Sub guardarComoUnSoloPDF()
    Dim RutaArchivo As String
    
    RutaArchivo = "C:\Users\nombreUsuario\nombreCarpeta"
    
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF,        Filename:=RutaArchivo & "\" & ActiveWorkbook.Name,         Quality:=xlQualityStandard, openafterpublish:=False
    
    MsgBox "Las hojas del libro " & ActiveWorkbook.Name & " se han convertido a PDF correctamente."
End Sub

En este caso, en nombreUsuario y nombre Carpeta se deben colocar los nombres de nuestra preferencia, además, el valor xlTypePDF del argumento indica que salida será en formato PDF, xlQualityStandard indica que la calidad será de tipo estándar y False de openafterpublish indica que no se va visualizar el archivo al terminar la ejecución del procedimiento o método. Por último se coloca un mensaje por medio de MsgBox para indicar que el archivo se ha creado correctamente.

Otro aspecto de interés es la propiedad ActiveWorkBook que representa el libro en la ventana activa, es decir, el libro de Excel que se abrió previamente. La propiedad ActiveWorkBook en si misma es un objeto WorkBook que tiene acceso al atributo Name, este atributo contiene el nombre del libro que se está trabajando.

Convertir una hoja de un libro de Excel a PDF
Para convertir una sola hoja de Excel a PDF el procedimiento será similar pero en este caso se va utilizar la propiedad ActiveSheet, esta propiedad representa la hoja que esté seleccionada y en visualización en el archivo de Excel que se ha abierto previamente. El código de programación que nos va permitir lograr este objetivo es el siguiente.

Public Sub guardarHojaEnPDF()
    Dim RutaArchivo As String
    
    RutaArchivo = "C:\Users\nombreUsuario\nombreCarpeta"
    
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo & "\" & ActiveSheet.Name, Quality:=xlQualityStandard, openafterpublish:=False
    
    MsgBox "La hoja de nombre " & ActiveSheet.Name & " se ha convertido a PDF correctamente."
End Sub

A continuación se muestran algunos enlaces que describen los detalles técnicos de los métodos y propiedades de Visual Basic utilizados en este artículo.

lunes, 19 de mayo de 2025

Creación de tablas dinámicas en Google Sheets

El espacio de trabajo de Google en sus hojas de cálculo (Google Sheets) ofrece en sus herramientas la posibilidad de trabajar con tablas dinámicas de manera similar a como lo hace Excel, con ellas también podemos resumir y analizar datos, a continuación se muestra un ejemplo paso a paso de cómo crear tablas dinámicas en esta herramienta.

Se puede considerar el siguiente ejemplo de una tabla de empleados de una empresa hipotética en Sheets (Clic en la imagen para ampliarla).

Ahora, para agregar la tabla dinámica nos dirigimos a la pestaña Insertar y en ella elegimos la opción de tabla dinámica que se muestra en la siguiente figura (Clic en la imagen para ampliarla).

Ya que se ha elegido la opción previa se va mostrar una ventana con el origen de datos que necesita la tabla dinámica así como un par de opciones para decidir donde colocar la nueva tabla, esto se puede observar en la siguiente figura.


Después, se va mostrar una sección con las mismas zonas que tiene Excel para trabajar las tablas dinámicas, es decir, filas, columnas, valores y filtros, en cada zona vamos a poder agregar la columna o campo que deseemos para poder realizar el análisis requerido. Véase la siguiente imagen.

Una configuración de tabla dinámica que se puede diseñar es el siguiente, colocar en la zona de valores los salarios de los empleados, en las filas sus nombres y en las columnas los respectivos departamentos, la tabla dinámica generada se muestra en la siguiente figura.
En cuanto a la zona de filtros se puede usar el estado activo o inactivo de los empleados para poder visualizar solo aquellos con un estado determinado.

Además, Sheets ofrece algunas sugerencias de tablas dinámicas que pueden ser de utilidad, estas se pueden observar en el editor de tablas, de esta manera podemos encontrar diversas opciones que nos podrían ayudar a analizar la información y que no habíamos tenido en cuenta, véase la siguiente imagen.
Otra de las ventajas de Google Sheets es la compatibilidad de los archivos con los de Microsoft Excel, de esta manera se pueden trabajar los proyectos en cualquiera de las plataformas de acuerdo a las necesidades que se tengan, así mismo Sheets se encuentra en una plataforma en línea o en la nube lo cual permite tener acceso a los archivos desde cualquier dispositivo con acceso a internet. También es posible colaborar con otros usuarios o miembros de un equipo en un mismo archivo. En resumen, esta herramienta nos da una alternativa a Excel que puede ser muy poderosa para manejar las bases de datos o proyectos que requieren el uso de una hoja de cálculo.


miércoles, 30 de abril de 2025

Análisis de una base de datos por medio de tablas dinámicas

Análisis de información de un conjunto de datos con productos de electrónica, este conjunto de datos simula una tienda de componentes electrónicos con algunos campos relevantes como las categorías, precio, país de origen, disponibilidad del producto, cantidad en existencia etc, además se colocan diversos productos que son comunes en el área de la electrónica. En este análisis se hace uso de diferentes configuraciones de tablas dinámicas de Excel para observar la utilidad que estas nos pueden proveer al momento de gestionar los productos que se tienen en el stock.

Enlace para acceder a este proyecto de Excel: https://1drv.ms/x/c/26601cb78d61cc7d/ProyectoComponentesElectronicos

La siguiente imagen muestra un extracto del conjunto de datos (Clic en la imagen para ampliarla)


Una primer configuración de tabla dinámica para este conjunto de datos es colocar en la zona de filas la categoría y justo después el producto, además en la zona de valores el precio unitario, esto con el fin de crear un filtro que nos permita analizar de manera individual cada categoría junto con los productos que pertenecen a ella, además, con esto en mente es posible agregar a la zona de filtros el país de origen y la existencia de los productos, esto sería de utilidad para situaciones como las siguientes:

  • Visualizar aquellas categorías con productos sin existencia para un posterior resurtido de componentes.
  • Considerar colocar nuevos productos a cada categoría así como agregar nuevas categorías para mejorar la variedad del producto.
  • Evaluar la posibilidad de contactar nuevos países a los que se les solicite importar determinados productos de cada categoría, etc.
En la siguiente imagen se muestra la tabla dinámica estructurada como se describió previamente. (Clic en la imagen para ampliarla)
Otra configuración para analizar los datos que puede resultar útil en una tabla dinámica es la siguiente, en la zona de filtros la categoría y la existencia del producto, en la zona de columnas el país de origen, en la zona de filas los productos y en la zona de valores los precios de cada producto, con esto, podemos evaluar los siguientes casos:
  • Considerar todos los productos de una categoría que provienen de un país determinado para ampliar o disminuir la cantidad de países de los cuales traer esos productos requeridos.
  • Evaluar la necesidad de ampliar los productos que pertenecen a cada categoría y al mismo tiempo tomar en cuenta los países de los que provienen tales productos, etc.
La tabla dinámica con esta configuración se puede observar a continuación. (Clic en la imagen para ampliarla)

La ventaja de las tablas dinámicas es que podemos colocarlas de diferentes maneras para facilitar la visualización, resumen y análisis de datos, incluso con configuraciones simples como la siguiente, en la zona de filtros la categoría, en la de filas el producto y en los valores los precios, esto podría ser valioso para analizar cada categoría junto con los precios unitarios de los productos para casos como gestionar los precios de acuerdo a las necesidades económicas de la empresa o negocio, además esto tiene la ventaja de que la visualización se muestra en un solo lugar sin tener que recorrer todo el conjunto de datos cuando este se vuelva más extenso. La siguiente imagen muestra esta tabla dinámica que es más sencilla de estudiar. (Clic en la imagen para ampliarla)

Adicionalmente, en la tabla que se configuró previamente se podría agregar un campo calculado que nos muestre el precio total para cada producto de acuerdo a la existencia de los mismos, esto nos va permitir personalizar los cálculos que no estén en existencia en la serie de operaciones que nos ofrece Excel, con esto podemos resumir y administrar de manera más extensa la información del conjunto de datos. La siguiente imagen muestran el campo calculado que se colocó en la tabla dinámica.

Como conclusión de este análisis, se puede observar el numeroso grupo de posibilidades que ofrecen las tablas dinámicas para facilitar la toma de decisiones que se necesitan tomar en una empresa, negocio o conjunto de información, en este caso, en el área de la electrónica.