Paso un rango grande desde una hoja de cálculo de Excel al parámetro ExcelRange de una función definida por el usuario (UDF) escrita en VBA.
- Puedo declarar el parámetro ExcelRange As Range y luego convertirlo a Variant:
Dim VariantArray As Variant
VariantArray = ExcelRange.Value2
o
- Puedo declarar directamente el parámetro ExcelRange de la UDF como Variante.
En cualquier caso, dentro de un bucle, convertiré cada elemento de VariantArray o ExcelRange en una variable Doble.
¿Cuál es más eficiente en términos de tiempo, 1. o 2.?
Respuesta1
En cualquier caso, dentro de un bucle, convertiré cada elemento de VariantArray en una variable Doble.
¿Cuál es más eficiente, 1. o 2.?
De todos modos, al convertir su rango a Variant, no veo una gran diferencia en el rendimiento.
Ya sea que convierta y luego apruebe O pase y luego convierta, debería requerir el mismo esfuerzo.
La diferencia viene en el uso de tu UDF:
- Si necesita hacer algo con el rango (por ejemplo, obtener la dirección), entonces obviamente necesita tomar un argumento de Rango
- Si espera que los usuarios pasen matrices, no un Rango, entonces es mejor declarar el argumento como Variante (por ejemplo,
=SUM({1,2,3})
es una fórmula válida en Excel).