Passer d'une gamme à une fonction personnalisée à partir de l'intérieur d'une cellule

Salut, je suis à l'aide de VBA dans Excel et besoin de passer dans les valeurs de deux plages dans une fonction personnalisée à partir de l'intérieur d'une cellule de formule. La fonction ressemble à ceci:


Public Function multByElement(range1 As String, range2 As String) As Variant
    Dim arr1() As Variant, arr2() As Variant
    arr1 = Range(range1).value
    arr2 = Range(range2).value
    If UBound(arr1) = UBound(arr2) Then
        Dim arrayA() As Variant
        ReDim arrayA(LBound(arr1) To UBound(arr1))
        For i = LBound(arr1) To UBound(arr1)
            arrayA(i) = arr1(i) * arr2(i)
        Next i
        multByElement = arrayA
    End If
End Function

Comme vous pouvez le voir, je suis en train de passer de la représentation de chaîne des plages. Dans le débogueur, je peux voir qu'ils sont bien passées et que le premier visible problème se produit lorsqu'il essaie de lire arr1(i) et montre que "subscript out of range". J'ai aussi essayé de passer dans la gamme elle-même (c'est à dire plage1 que...), mais sans succès.

De mon mieux suspicion a été qu'il a à faire avec la Feuille Active depuis qu'il a été appelé à partir d'une autre feuille de l'un avec la formule (le nom de la feuille est la partie de la chaîne), mais qui était dissipé depuis que je l'ai essayé à la fois de l'intérieur de la même feuille, et en précisant la feuille dans le code.

BTW, la formule dans la cellule ressemble à ceci:

=MOYENNE(multByElement("A1:A3","B1:B3"))

ou

=MOYENNE(multByElement("Mon Sheet1!A1:A3","Mon Sheet1!B1:B3"))

quand je les ai appeler à partir d'une autre feuille.

Je me demande pourquoi vous n'utilisez pas la fonction de tableau? C'est, tapez la formule dans la barre =MOYENNE(A1:A3*B1:B3), puis appuyez sur CTRL+MAJ+ENTRÉE cela va insérer une fonction de tableau (il aura {} autour d'elle) qui multiplie chaque élément dans la plage A1:A3 par B1:B3
C'est une bonne idée à laquelle j'avais pensé, mais il a préféré essayez ceci en raison de l'espace sur la feuille et de l'expansion possible de l'utilisation de cette fonction.

OriginalL'auteur Luis | 2010-06-10