martes, 14 de marzo de 2017

MACRO PARA COMBINAR COLUMNAS EN EXCEL

De acuerdo con la definición matemática una combinación es un arreglo donde el orden no tiene importancia, podrías por ejemplo saber todas las combinaciones del baloto, lo cual no implica que lo llegaras a ganar. Siguiendo con los conceptos matemáticos la notación para las combinaciones  es  C(n,r) cuantas veces se pueden combinar n elementos r a la vez.

Pensando en el título de hoy escribí una macro que encuentra todas las combinaciones posibles  entre tres columnas con diferentes valores. Así funciona la macro:

1.    En la hoja de cálculo tenemos una tabla con la información que combinaremos


1    2.   Hemos agregado dos figuras que funcionan como botones
Cuando el usuario haga click en el botón combinar, se ejecutara la macro que describo a continuación:

  a.    Definimos cuatro variables


Ws de tipo Excel.worksheet representa la hoja de cálculo principal, wsformat  también de tipo Excel.worksheet representa la hoja de cálculo con los formatos que daremos a cada celda,  combinación de tipo string nos servirá para ir almacenando de forma temporal cada posible combinación , cuenta de tipo entero nos servirá para contar el número de combinaciones posibles.

a    b. Creamos la rutina principal


A partir de esta rutina invocaremos otras que realizaran la combinación entre columnas, definimos tres variables de tipo entero: lastrow , f  y rowreplace. Asignamos a la variable WS definida en el punto anterior  la hoja de cálculo principal y a la variable wsformat la hoja de cálculo con los formatos. Invocamos la rutina columnaA que combina la columna A de la hoja de cálculo con las columnas B y C, se aumenta en uno el contador de filas  e invocamos la rutina columnaC que combina la columna C con las columnas A y B ,  nuevamente se aumenta el contador de filas en uno y se invoca la rutina columnaB que combina la columna B con las columnas A y C.

1   3. Explicare el funcionamiento de la rutina columnaA , las rutinas columnaC y columnaB obedecen al mismo algoritmo, con diferencias muy leves.


La rutina recibe los siguientes parámetros: lastrow de tipo entero donde almacenaremos el número de la última fila con datos en la columna a, rowreplace de tipo entero será un contador de la celda de las columnas B y C (según corresponda) que estamos combinando con la columna A, ws de tipo Excel.worksheet que representa la hoja de cálculo principal y  wsformat que representa la hoja de cálculo de formatos.

Definimos la variable f que identifica la fila en la que estamos ubicados, la inicializamos en 6 porque desde esta fila empezaremos a recorrer la hoja de cálculo principal. Buscamos cual es la última fila con datos en la hoja de cálculo y guardamos este resultado en la variable lastrow.

Iniciamos un ciclo desde 6 hasta el valor que contenga la variable lastrow y dentro de este ciclo combinamos todas las filas de la columna A, almacenando el resultado en la variable combinación.

Terminado este ciclo copiamos los formatos de la hoja wsformat y los pegamos en la hoja principal, después asignamos el valor de la variable combinación.

Iniciamos otro ciclo desde el valor que contiene la variable rowreplace hasta la última fila con datos – 1, en este ciclo invocaremos una rutina que combina las columnas A y B. Como resultado obtendremos las combinaciones posibles de la columna A y B.

Hacemos lo mismo para las columnas A y C.

La siguiente rutina combina las columnas A y B.




Recibe como parámetros las variables de tipo entero lastrow , rowreplace y f.
Desde 6 hasta la última fila con datos recorre la columna A combinándola con el valor de la columna B en la fila rowreplace.

Si hacemos click en el botón combinar obtendremos como resultado, todas las combinaciones posibles


Cuando se hace click en el botón limpiar se ejecuta una rutina que borra la información de las combinaciones en la hoja de cálculo.


Si quieres recibir la hoja de cálculo con la macro, escríbeme a macrosymacros1@gmail.com o puedes descargarla siguiendo este enlace.



1

No hay comentarios:

Publicar un comentario