¿Cómo evitar do loop para trabajar con distintas hojas de un mismo libro?

La hoja “Ayudantes”, contiene los detalles como: ficha (código interno del trabajador), tipo de asistencia o inasistencia, fecha, códigos de transportes en los que trabajó, y otras variables que condicionarán el monto total de su bonificación por día.

Las filas representan el detalle del día, por cada trabajador, y estas se encuentran ordenadas de tal manera que presenta los datos agrupados por cada trabajador, o sea, si el ayudante solo cuenta con 5 días, las 5 filas estarán en orden consecutivo, por lo terminando la información de este, comienza con los de otro, y así sucesivamente.

En esta primera hoja, utilizando do loop, recorro las celdas de cada fila para almacenar en variables, datos como ficha y nombre, los cuales utilizaré para ubicarlos en la hoja “Reporte”, donde presentaré, además, fecha de inicio y fin que se consideró para los cálculos, total de bonificaciones y la cantidad de cada tipo de bonificación que determinó dicho total. El dato “ficha”, lo utilizo para que el ciclo secundario almacene los datos, mientras este dato se mantenga en las filas, e ir contando y acumulando las distintas bonificaciones asignadas a este.

Dentro de las celdas a analizar por fila, se encuentran los códigos de transporte en los cuales participó, donde por cada día (fila), puede llegar a tener hasta 6, y por cada transporte le corresponderán 5 o más clientes. En la hoja “Concrecion” se indican los códigos de clientes asignados a cada transporte, y en la hoja “Clientes”, se encuentra el código de cliente con sus respectivos datos que determinarán igualmente las bonificaciones por transporte. Para esto, con un tercer ciclo do loop recorro los transportes, guardando el primero en una variable, para luego pasar a la hoja “Concreción” para buscar la coincidencia en la columna “A”. Al encontrarla, copio en otra variable, el código de cliente que se encuentra en columna “B”. Con esto, paso a la hoja “Clientes”, para buscar en la columna “A” la coincidencia. Al encontrarla. Comienzo a evaluar la información que se presenta en su misma fila.

Luego de lo anterior, repito dentro del tercer ciclo este procedimiento para buscar el siguiente cliente asignado al mismo código de transporte, debiendo regresar a la hoja “Concrecion”. Así hasta que se encuentre con una celda vacía, donde volverá al segundo ciclo para pasar al siguiente código de transporte.

Este segundo ciclo, se repite hasta que se tope con una celda vacía o la celda no contenga números.

Todo esto me da resultado, solo si reúno las 3 hojas en una sola, pero pasar de una hoja a otra, para luego volver para sacar datos y aplicar operaciones, no. Por este motivo, les pido ayuda para ver cómo lo puedo hacer, ya sea conservando las instrucciones do loop, o aplicando otras que me permitan hacer más rápido todo este procedimiento, que dejo en el siguiente enlace, pudiendo, además, trabajar sin concentrar toda la información en una sola hoja.

Respuesta
1

[Hola

Olvidaste el enlace para ver el archivo.

Abraham Valencia

Es complicado que alguien reproduzca tu archivo para poder probar tu macro, pero en vías de que vas mejorándola, sugiero leer los siguientes enlaces e implementar sus recomendaciones, como para empezar:

https://abrahamexcel.blogspot.com/2017/12/el-uso-y-abuso-de-select-y-selection-en.html

https://abrahamexcel.blogspot.com/2017/11/consejos-para-el-uso-de-variables-en.html

https://abrahamexcel.blogspot.com/2017/12/el-indiscriminado-uso-de-las-variables.html

Saludos]

Abraham Valencia

1 respuesta más de otro experto

Respuesta

De entrada creo que ya en otro post te mencione que usar un Do loop en VBA es como querer participar en una fórmula 1 usando una bicicleta con una llanta ponchada es lentísimo esa forma de programación y para acabarla usas demasiados select y offset además de que no usas with end with, eso todavía alentá más el programa, la macro más que mejorarse es reescribirla usando ciclos for i= next i o for each next, funciones propias de excel del tipo worksheetfunction o bien aplicar múltiples fórmulas en un solo paso pero para darte una mejor solución seria mejor que pusieras datos para ver exactamente que hace tu macro y poder darte una solución aplicada a tus datos, ojo los datos pueden ser inventados lo importante es ver la estructura sobre la que trabaja tu macro. por cierto un Do While dentro de otro Do While es lo peor que puede hacer. Imagina que tienes 10000 registros donde aplicas este tipo de programación comparandao cada registro 10000 veces te va a hacer 100,000,000 de recorridos hay te encargo el tiempo de ejecución.

Por cierto ya probé tu macro y ma apareció esto, ese el problema cuando usas demasiados do while... loops

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas