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.
- Posso declarar o parâmetro ExcelRange As Range e depois convertê-lo para Variant:
Dim VariantArray As Variant
VariantArray = ExcelRange.Value2
ou
- 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).