Excel COUNT es lento cuando se reconstruye la hoja de datos

Excel COUNT es lento cuando se reconstruye la hoja de datos

Estoy trabajando con un complemento de Excel que elimina y recrea una hoja de datos cuando la actualiza con datos de una base de datos activa, de tal manera que las referencias a la hoja de datos no se rompan. Estoy usando la fórmula COUNT('DataSheet'!A:A) para contar cuántas filas de datos hay menos la fila del encabezado de la columna. Si los datos no se actualizan, se volverán a calcular casi instantáneamente, pero cuando los datos se actualicen usando el complemento, el recuento aumentará lentamente hasta que la fórmula haya terminado de calcular. Necesito usar otras fórmulas similares que ralentizan significativamente el libro.

Puedo pensar en soluciones alternativas, pero necesito saber qué está causando la diferencia en el comportamiento cuando COUNT se vuelve a calcular normalmente y se vuelve a calcular cuando se actualizan los datos. Por el momento, los datos tienen el mismo número de filas antes y después de la actualización y el rango formateado no es más largo que los datos.

Editar: Me pregunto si esto tiene algo que ver con la forma en que Excel maneja qué celdas están activas/llenas en la memoria.

Respuesta1

Bienvenido @TheGreatO96.

Intente usar COUNTA() en lugar de COUNT(), pero casi dudo que eso ayude demasiado. Sospecho que tiene algunas cosas que optimizar en su complemento. Una actualización de la base de datos es una acción volátil y desencadenará recálculos que normalmente no se activan sin la actualización. Si utiliza funciones volátiles como OFFSET, INDIRECTO, AHORA o inclusoformato condicional, las cosas se detendrán en un libro de trabajo grande. El hecho de que pueda ver el valor de la actualización COUNT(...) en una sola celda podría indicar retrasos significativos en su macro. Podrías intentar ajustar algunas cosas en tu código:

  • Inicie su macro deshabilitando el recálculo. Ejecute el resto del código. Vuelva a activar la recalculación.

  • Inicie su macro desactivando las actualizaciones de pantalla. Ejecute el resto del código. Activa las actualizaciones de pantalla.

  • Inicie su macro deshabilitando eventos. Ejecute el resto del código. Vuelva a activar los eventos.

PD. Una vez aumenté la velocidad de ejecución de mi macro en casi 2 órdenes de magnitud simplemente eliminando las funciones OFFSET en favor de rangos con nombres relativos.

información relacionada