J'ai une cellule dont la valeur est une constante de tableau, par exemple, la cellule A1 est définie sur ={1,2,3,4,5,6}

J'ai ensuite défini une fonction en VBA:

Function MyFunc(Data)
MyFunc = Data.Rows.Count
End Function

Je veux que la fonction renvoie la longueur du tableau (6) quand je peux =MyFunc(A1), mais en utilisant le débogueur, je trouve que la variable 'Data' que ma fonction reçoit ne contient que le premier élément de ce tableau. Data.Rows.Count prend la valeur 1 et TypeName(Data) la valeur "Plage"

3
user3582076 19 juin 2019 à 19:57

3 réponses

Meilleure réponse

Et une autre méthode:

Function myFunc(Data)
    myFunc = UBound(Evaluate(Data.Formula))
End Function
5
Ron Rosenfeld 19 juin 2019 à 18:42

Je ne sais pas quel est votre cas d'utilisation, mais je pense que vous pouvez simplement utiliser Split ici.

Function MyFunc(ByVal Data As Range) As Long
    Dim x
    x = Split(Data.Formula, ",")
    MyFunc = UBound(x) + 1
End Function

enter image description here

Évidemment, cela peut être rendu plus robuste (par exemple, gérer une entrée multicellulaire), mais je pense que cela vous permet d'aller dans la bonne direction.

3
BigBen 19 juin 2019 à 17:08

Peut être

Function MyFunc(data As Range)
Dim x

x = Split(Mid(data.Formula, 3), ",")
MyFunc = UBound(x) + 1
End Function
3
YasserKhalil 19 juin 2019 à 17:09