O problema aqui é que a função Sin
espera um único valor como um parâmetro, não uma matriz
Observe que a função Sin
do VBA não é igual à função da planilha Sin
(e Sin
não é membro do objeto WorkSheetFunction
, portanto, WorksheetFunction.Average(WorksheetFunction.Sin(r))
também não funcionará)
Se você alterar seu udf para
Function MyFunction(r As Variant) As Variant ' r is the range, e.g. A1:A5 as above
MyFunction = WorksheetFunction.Average(r)
End Function
você obterá a média do intervalo especificado, que mostra que o udf pode manipular dados de matriz.
Se você está procurando um método eficiente, meu conselho é ficar com funções nativas onde você pode (matriz ou não), como uma chamada para um udf, qualquer udf , é muito mais lenta do que funções nativas.