Saltar al contenido

Recorrer todas las ocurrencias de un registro muy muy lento


Recommended Posts

publicado

Hola a todos! como estan? 

recientemente me he sumando al foro, aunque lo he seguido hace mucho, son siempre mi referencia para cualquier duda o consulta asi que feliz de poder sumarme...

Ahora tengo un problema que me esta rompiendo la cabeza hace dos semanas, y me atasque.

Tengo una base de registros con mas de 170000 filas, cada registro puede tener mas de una fila, la base esta en la hoja 1.

Luego en la hoja dos tengo dos tablas, una a la izquierda que tiene esos mismos registros y su codigo U (ubicacion), sin duplicados.  Otra tabla mas a la derecha que agrupa los Codigo de Usos de cada  registros segun la categoria sea  Seccional, Division o Central.

 

Lo que necesito hacer es que por cada num de registro y cod U, busque en la hoja 1, si en alguna fila tiene un codigo de uso que este agrupado en seccion, division o central, y si es asi, que marque con una X la columna con el categoria.

hoja2 a modo de ejemplo

image.thumb.png.81aaab0ee7d2b9c2188c586521731579.png

ejemplo para el registro 298796 de SAN NIC.  si busco ese registro en la hoja 1 encuentro que sola una categoria tiene, que es la Division, pero para eso tuve que recorrer todas las ocurrencias de este registro que coincidan con la ubicacion san nic. y chequear cada categoria.

 

 

Probe de mil formas pero todas son lentisimas.  mas de diez minutos de ejecucion.

Sabiendo que son mas de 170 mil y que por cada uno tengo que recorrer todas las ocurrencias, hay alguna forma de hacerlo mas rapido?
 

Agradezco por favor si alguien me ayuda a salir de este punto... que me tiene mal.

 

subo archivo de ejemplo... 

test (1).zip vba.txt

publicado

Sube un archivo con un ejemplo de lo que tienes y de lo que quieres, no hace falta que la muestra sea muy extensa.

publicado

Hola Antoni! perdon me olvide de subir el archivo, aca va el codigo por un lado y el excel con nada casi por otro

queria que queden varios registros de distintas Cod U, y fue imposible... no se si sirvan de ejemplo asi tan tan resumido

vba.txt test (1).zip

publicado

Probé combinando Bubles de recorrido y Loop, , pero es un doble recorrido, por un lado recorrer la hoja uno para encontrar el numero de registro y el Cod U, que coincida, y luego hacer un find next, para buscar todas las ocurrencias de ese registro en ese codigo de U, e ir marcando cuando encuentre alguno de los codigos de uso que esta en la hoja 2, y luego recien saltar a la siguiente fila de la hoja 2...

las ultima vez que me anduvo tardo 11 min solo en hacer eso ?

publicado

El archivo .zip da error al intentar descomprimirlo.

Súbelo como .xlsx o súbelo a la nube (Mega, OneDrive, DropBox,......) y adjunta el enlace público

publicado

test xls.rar Antoni, ahi he probado de nuevo, simplificando en una hoja la base de datos, y al costado la tabla que deberia ser resultado , y junto a ella la tabla con los criterios a buscar por cada registro, el xls por mas que deje 5 filas no me lo sube, va de nuevo comprimido, y sino tmb por las dudas ? AQUI

 

Miles de gracias

publicado

No he podido probar la macro porqué al archivo que has subido le falta la hoja CoCo, aunque la he revisado y no parece tener excesivos problemas más allá del volumen de información.

En cualquier caso, añadiendo Application.ScreenUpdating=False al principio de la macro, el rendimiento debería mejorar bastante .

publicado
hace 25 minutos , Antoni dijo:

No he podido probar la macro porqué al archivo que has subido le falta la hoja CoCo, aunque la he revisado y no parece tener excesivos problemas más allá del volumen de información.

En cualquier caso, añadiendo Application.ScreenUpdating=False al principio de la macro, el rendimiento debería mejorar bastante .

Gracias Antoni, por tomarte el tiempo de revisarlo...pero con la limitante que no me deja subir casi nada, tuve que eliminar hoy y eliminar cientos dy miles de registros, para poder subir el ejemplo... 

Application.ScreenUpdating=False ya lo he agregado porque ese codigo se ejecuta dentro de otro, asi que esto esta activo, pero corriendo solo la parte que comparti me demora mas de 10 minutos... y sigo dando vueltas sin encontrar alguna otra forma, teniendo en cuenta que son mas de 170 mil

Estoy totalmente perdida, probe combinar match index etc, y no me funciona nada. asi como esta funciona pero excesivamente lento, se que tiene que a ver algo que lo optimice, pero sigo sin encontrarlo, no puedo avanzar de ahi ?

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
    • Hola, tal cual se plantea, solamente con macros (VBA); en todo caso, hacerlo a mano o con "CTRL + ;". Saludos.
    • Mil gracias, en verdad todo apoyo es super agradecido,   Su aporte y comentarios valen mucho para in servidor, y tiene razon esperare a conocer si alguien comparte alguna otra manera,   Gracias!!! (y)
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.