Pregunta: | 13428 - MéTODO FIND DE EXCEL |
Autor: | xnmiranda xnmiranda |
Tengo esta inquietud, a ver si alguien me puede ayudar:
Estoy leyendo mediante Visual Basic una hoja de Excel, a esta hoja le he aplico un autofiltro y obtengo un rango de las celdas. Ok, utilizo este rango y lo leo así: termino = Now For each r in rango_filtro Set rango_resultado = rango_de_una_hoja.Find _ (r.Value,,xlValue,xlWhole,xlByColumns) If rango_resultado Is Nothing Then ...... End If debug.print format (Now - termino, "hh:mm:ss") Next Claro que hago uso de Option Explicit y declaré todas las variables. El problema es que a veces lee n cantidad de celdas y por cada una hay una disminución proporcional del tiempo en que lee, O sea, que en un inicio lee 5 celdas por segundo y luego a medida que lee más, el tiempo disminuye y disminuye (4 por segundo, 3 por segundo, 2 por segundo, y así sucesivamente) llega incluso a leer una celda por cada 10 segundos. Porque pasa esto?, me gustaría saber si debo descargar alguna pila o si existe una API que mejore esto, ya que el programa funciona bien el único inconveniente es la velocidad. |
Respuesta: | dcac xyz |
No se si esto da solucion a tu pregunta, el problema es que cuando tu aplicas un autofiltro, Excel lo que hace es ocultar las celdas que no cumplen con tu solicitud de busqueda, entonces cuando lees las celdas desde VisualBasic este lee todas las celdas de la hoja de calculo.
Que quieres buscar en Excel? Si es un dato unico utiliza el Find de Excel y el te va a situar en la celda especifica donde se encuentra ese dato. Yo hice un programita con VB y Excel si deseas te puedo enviar el codigo de las busquedas, en realidad el programa no lo pude utilizar porque era demasiada informacion alrededor de (23.000) registros y era extremadamente lento. |