À l'aide de SOMME() en VBA
Si j'ai un ensemble de cellules dans une feuille de calcul que je veux ajouter, je peux utiliser la formule:
=SUM(Sheet1!A1:A10)
Pour ce faire, dans un sous, je voudrais utiliser:
Sub example1()
Dim r As Range, v As Variant
Set r = Sheets("Sheet1").Range("A1:A10")
v = Application.WorksheetFunction.Sum(r)
End Sub
Si, toutefois, je tiens à ajouter en place une cellule unique à travers de nombreuses feuilles de calcul, j'utilise la formule:
=SUM(Sheet1:Sheet38!B2)
En VBA cette ligne échoue lamentablement, comme expliqué dans Spécifiez une plage Excel à travers les feuilles en VBA:
Sub dural()
v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub
J'ai deux solutions de contournement. Je peux la somme par la programmation d'une boucle:
Sub example2()
Dim i As Long
Dim v As Variant
v = 0
For i = 1 To 38
v = v + Sheets(i).Range("B2")
Next i
End Sub
ou en utilisant Evaluate()
:
v = Evaluate("Sum(Sheet1:Sheet3!B2)")
Est-il possible d'utiliser Application.WorksheetFunction.Sum()
pour ce calcul, ou devrais-je le bâton de la boucle?
Pourquoi ne pas
Je n'ai pas fait tout cela dans un temps long, donc je ne vais pas ajouter cela comme une réponse jusqu'à ce que vous pouvez l'essayer, mais ne devriez-vous pas besoin d'utiliser également:
Je ne l'utilisation de
Vous pouvez également créer deux caché des feuilles blanches "DÉMARRER" puis "TERMINER" et jalonnent les fiches que vous le souhaitez. Puis
Et comme vous le savez, mais je vais le mettre ici pour les futurs téléspectateurs, vous pouvez remplacer la B2 de la partie avec une plage dynamique de référence. Par exemple, dire que vous avez la plage que vous souhaitez définir comme une variable
evaluate
?Je n'ai pas fait tout cela dans un temps long, donc je ne vais pas ajouter cela comme une réponse jusqu'à ce que vous pouvez l'essayer, mais ne devriez-vous pas besoin d'utiliser également:
Set r = Sheets("Sheet1").Range("Sheet1:Sheet3!B2")
et puis ne Sum
sur r
? Ou similaire... tout ce que vous devez faire pour créer une gamme de feuilles. Vous êtes probablement mieux d'utiliser un de vos autres approches.Je ne l'utilisation de
Evaluate()
et il fonctionne très bien....mais si je dois calculer basée sur une gamme dynamique (même sur toutes les feuilles), il y a une étape supplémentaire de décisions de la chaîne-je fournir à Evaluate()
Vous pouvez également créer deux caché des feuilles blanches "DÉMARRER" puis "TERMINER" et jalonnent les fiches que vous le souhaitez. Puis
v = Evaluate("Sum(START:FINISH!B2)")
Et comme vous le savez, mais je vais le mettre ici pour les futurs téléspectateurs, vous pouvez remplacer la B2 de la partie avec une plage dynamique de référence. Par exemple, dire que vous avez la plage que vous souhaitez définir comme une variable
rng
il serait v = Evaluate("Sum(START:FINISH!" & rng.Address(1,1) & ")")
OriginalL'auteur Gary's Student | 2016-05-27
Vous devez vous connecter pour publier un commentaire.
Je crois que le problème avec le worksheetfunction.la somme est qu'il a besoin d'arguments pour évaluer pas de chaîne. WorksheetFunction.Somme("Sheet1!A1:A3") échoue. Cependant, il réussit
Les Gammes pourrait être ce que vous voulez.
OriginalL'auteur mongoose36
Vous avez besoin d'utiliser la boucle pour effectuer le calcul sur toutes les feuilles, c'est le moyen le plus efficace par les regards des choses. Comme mentionné ci-dessus, vous pouvez taper chaque gamme séparément à la place.
Pourrait être intéressant de conversion de la plage de votre addition à un double (ou unique, entier, etc) parce que parfois VBA lit les nombres sous forme de texte.
v = v + Cdbl(Sheets(i).Range("B2"))
La raison pour laquelle vous rencontrez des problèmes avec
Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
est parce que si vous tapez la formule dans Excel, la gamme " Feuil1:Feuil3!B2 ne sera pas reconnu par excel.D'utiliser un
Application.WorksheetFunction
il a à travailler dans excel à l'extérieur de VBA.Espère que ça aide.
Pour être juste, la gamme dans la capture d'écran a une faute de frappe. Il ya un supplément de
!
avant les deux points.OriginalL'auteur Tabias