J'ai écrit ce code pour ajouter des chiffres dans une colonne. Il ne s'agit pas d'ajout de la dernière cellule.
Par exemple, s'il y a trois numéros 1, 2 et 3, il résumera 1 et 2 et ignorera la valeur dans la troisième cellule. Lorsqu'il y a un quatrième numéro 1, 2, 3 et 4, il ajoute 1, 2 et 3. P>
3 Réponses :
Disons que le compteur = rng.count donne 4, et vous commencez votre i = 2 (éventuellement garder le titre de votre colonne). Votre code n'imprimera pas 4 chiffres, car vous démarrez une boucle de 2. P>
Le compteur devrait ressembler à ceci: Compteur = rng.count + 1 p>
et cela fonctionnera p>
Merci, cela a fonctionné mais il y a maintenant un autre problème et c'est si je laisse la première cellule, le code donne la valeur de la cellule suivante et n'ajoute pas toutes les autres cellules de cette colonne spécifique. Idéalement, il devrait lancer une erreur (en raison de la première cellule étant vide) ou d'ajouter tous les numéros de la colonne
Eh bien, je pense qu'à la première fois, je n'ai pas compris votre argument alors, je pensais que vous voudriez coller des nombres dans la colonne B de 0 à la dernière rangée, à partir de l'adresse B2. Si oui, cela fonctionnera:
Sub SumAll()
'give the sum of all numbers in column B, starting from B2
Dim Rng As Range
Dim a, i As Long
Set Rng = Range("b2", Range("b2").End(xlDown))
Counter = Rng.Count + 1
a = 0
For i = 2 To Counter
a = a + Cells(i, "B").Value
Next i
ActiveCell.Value = a
End Sub
Merci Trueman, je pense que je aurais dû l'avoir expliqué mieux mais ma mauvaise. En fait, j'ai des nombres aléatoires dans la colonne B (à partir de la cellule B2) et tout ce que je veux, c'est une somme de tous ces nombres dans une cellule sélectionnée ou active (pourrait être une cellule) maintenant lorsque j'utilise le code (que vous avez fixé) Cela me donne la somme (qui est le bon comportement) mais lorsque je supprime le premier numéro (dans la cellule B2), le code renvoie la valeur de la deuxième cellule (B3) uniquement et ne ajoute pas les autres numéros de la colonne, alors je suis donc pas certain de pourquoi.
C'est parce que .end (xlowown) - cela fonctionne comme Ctrl + DikaRrow et se termine sur le dernier non vide, ni d'une première cellule vide dans la colonne. C'est pourquoi lorsque vous supprimez la valeur dans une ligne spécifique, elle «cassera» la plage. Si vous souhaitez numériser toutes les lignes, peu importe si elle est vide ou que vous n'utilisez pas la boucle de la première ligne et que vous obtiendrez la somme de la plage de colonnes entière (à partir de la ligne 2 bien sûr):
Sub SumWholeColumn()
'give the sum of all numbers in column B, starting from B2
Dim i, a As Long
Dim maxRows As Integer
Dim column, addr As String
a = 0
column = "b"
maxRows = 1000
For i = 2 To maxRows
addr = column & i
a = a + Cells(i, "B").Value
Next i
ActiveCell.Value = a
End Sub