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.
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
Vous devez vous connecter pour publier un commentaire.
Première, voir le commentaire Remou gauche, car c'est vraiment ce que vous devez faire ici. Vous ne devriez pas besoin de VBA à tout pour obtenir un élément-sage multiplication de deux matrices.
Deuxième, si vous voulez travailler avec des chaînes, vous pouvez le faire en déclarant vos arguments de la fonction de type de Plage. Vous pouvez donc avoir
et pas besoin de résoudre les chaînes de références de plage vous-même. À l'aide de cordes empêche Excel à partir de la mise à jour des références, car les choses se sont déplacés dans votre feuille de calcul.
Enfin, la raison pour laquelle votre fonction échoue, la façon dont il le fait est que, parce que le tableau que vous obtenez à partir en tenant de la "Valeur" d'une Plage de cellules à deux dimensions, et vous auriez besoin pour accéder à ses éléments avec deux indices. Puisqu'il semble que vous avez l'intention d' (élément-sage) multiplier deux vecteurs, soit
ou
selon quelle orientation vous attend à partir de votre entrée. (Notez que si vous faites cela avec VBA, orientation de ce qui est conceptuellement un 1-D de la matrice de questions, mais si vous suivez Remou les conseils ci-dessus, Excel va faire la bonne chose, peu importe si vous passez dans des lignes ou des colonnes, ou les références de plage ou un tableau de littéraux.)
Comme un épilogue, aussi, il semble que vous n'utilisez pas l'Option Explicite. Google autour de quelques coups de gueule sur pourquoi vous avez probablement toujours envie de le faire.
OriginalL'auteur jtolle