Tengo un modelo de Excel que usa casi todas las UDF. Hay, por ejemplo, 120 columnas y más de 400 filas. Los cálculos se realizan verticalmente y luego horizontalmente, es decir, primero se hacen todos los cálculos para la columna 1, luego el resultado final de la columna 1 es la entrada de la columna 2, etc. En cada columna llamo alrededor de seis o siete UDF que llamar a otras UDF. Las UDF suelen generar una matriz.Funciones definidas por el usuario en Excel y problemas de velocidad
Las entradas para cada una de las UDF son un número de variables, algunas variables de rango, algunas dobles. Las variables de rango se convierten a matrices internamente antes de acceder a sus contenidos.
Mi problema es el siguiente, puedo construir el modelo Excel sin UDF y cuando ejecuto simulaciones, puedo finalizar todos los cálculos en X horas. Cuando uso UDF, el tiempo de simulación es de 3X horas o más. (Para responder a la pregunta obvia, sí, tengo que trabajar con UDF porque si quiero hacer pequeños cambios en el modelo (por ejemplo, agregar otro tipo de activo (es un modelo financiero)) se tarda casi un día en rehacer el modelo. sin UDF para ajustarse a la nueva estructura legal/financiera, con UDF se necesitan aproximadamente 20 minutos para acomodar una estructura financiera diferente.)
En cualquier caso, he desactivado la actualización de pantalla, no hay copia y pegado en las funciones , el uso de tipos de variantes es mínimo, todos los datos están contenidos en una hoja, convierto todas las variables de tipo de rango a las matrices antes de obtener los contenidos.
¿Qué más puedo hacer que no sea obtener una computadora más rápida o su equivalente para hacer que el código de VBA/archivo Excel funcione más rápido? Por favor, avíseme si esto necesita más aclaración.
Gracias!
¿Puedes publicar una función aquí? o una versión simplificada para que podamos echar un vistazo? –
wow, no pensé que obtendría respuestas tan rápido. Veré si puedo publicar una versión simplificada de lo que sucede en algún momento de la semana. gracias por los mensajes! –
Parece que podría estar en el punto en el que el programador-sobrecarga para codificar sus UDF en C y empaquetarlas en un XLL vale la pena para ahorrar la sobrecarga de ejecución de llamar a un montón de UDF de VBA ... – jtolle