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.