Qual é a melhor maneira de passar um intervalo do Excel para uma função definida pelo usuário?

Qual é a melhor maneira de passar um intervalo do Excel para uma função definida pelo usuário?

Passo uma grande variedade de uma planilha Excel para o parâmetro ExcelRange de uma função definida pelo usuário (UDF) escrita em VBA.

  1. Posso declarar o parâmetro ExcelRange As Range e depois convertê-lo para Variant:
    Dim VariantArray As Variant
    VariantArray = ExcelRange.Value2

ou

  1. Posso declarar diretamente o parâmetro ExcelRange da UDF como Variant.

Em ambos os casos, dentro de um loop, converterei cada elemento de VariantArray ou ExcelRange em uma variável Double.

O que é mais eficiente em termos de tempo, 1. ou 2.?

Responder1

Em ambos os casos, dentro de um loop, converterei cada elemento de VariantArray em uma variável Double.
O que é mais eficiente, 1. ou 2.?

De qualquer forma, ao converter seu intervalo para Variant, não vejo uma grande diferença no desempenho.
Se você converte e depois passa OU passa e depois converte deve exigir o mesmo esforço.

A diferença está no uso do seu UDF:

  • se você precisar fazer alguma coisa com o intervalo (por exemplo, obter o endereço), obviamente precisará usar um argumento Range
  • se você espera que os usuários passem matrizes, não um intervalo, então é melhor declarar o argumento como uma variante (por exemplo, =SUM({1,2,3})é uma fórmula válida no Excel).

informação relacionada