¿Cuál es la mejor manera de pasar un rango de Excel a una función definida por el usuario?

¿Cuál es la mejor manera de pasar un rango de Excel a una función definida por el usuario?

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.

  1. Puedo declarar el parámetro ExcelRange As Range y luego convertirlo a Variant:
    Dim VariantArray As Variant
    VariantArray = ExcelRange.Value2

o

  1. 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).

información relacionada