Jump to content

Recorrer todas las ocurrencias de un registro muy muy lento


Recommended Posts

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

Edited by alumine30
adjuntar archivo
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 ?

Link to comment
Share on other sites

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

Edited by Antoni
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 .

Edited by Antoni
Link to comment
Share on other sites

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 ?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • 72 ¿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
  • Files

  • Download Statistics

    • Files
      169
    • Comments
      89
    • Reviews
      26

    Latest File
    By pegones1

    4    0

  • Crear macros Excel

  • Posts

    • buen día estimados los molesto con la siguiente consulta yo tengo un archivo Excel de valores numéricos (costo) , pero debo de pasarlo a un formato texto con tres decimales por mas que sea un entero. cual seria la mejor forma para tener la columna CONCATENADO, en la que debe figurar el entero con tres decimales desde ya muchas gracias por la ayuda de siempre enteros y decimales en celdas distintas.xlsx
    • Muchas gracias por la respuesta Israel. Me sirve el dato. No es necesario algo tan complejo. Si por ahí tienes una idea de utilización que me puedas orientar con la función GoogleFinance te lo agradezco. 
    • Hola a todos, Necesito una formula que busque los días que hubo la temperatura más alta y los anote separados por un guion. En el ejemplo que subo serían los días 10, 14 y 26. Gracias de antemano Máximas mensuales.xlsx
    • Lo que te puedo comentar sobre tu consulta es en base a mi experiencia y que tanto en Excel como en Google Sheets es posible obtener el tipo de cambio. En Excel 365 usando la función MONEDA y en Google Sheets tienes una función llamada GOOGLEFINANCE(), Es importante resaltar que el tipo de cambio no es de un sitio específico como lo quieres. Para obtener la cotización del dólar desde un sitio específico como BNA, necesitarías usar técnicas de web scraping. Un método utilizado para extraer información de sitios web. Sin embargo, este proceso no siempre es posible debido a las restricciones del sitio web. Si eres cliente del Banco podrías consultar con la institución.
    • Hola a ambos, ...y si te interesa con fórmula, puedes probar con: =SUSTITUIR(MATRIZATEXTO(LET(a;CODIGO(EXTRAE(A1;SECUENCIA(LARGO(A1));1));SI(a=209;"ñ";SI(a<91;CARACTER(a+32);CARACTER(a-32)))));"; ";"") Veo que dispones de M365, así que no tendrás problemas. Saludos,
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy