48 votes

Comment compter le nombre de lignes dans Excel avec des données?

La colonne A contient des données comme celle-ci (c.-à-d. des cellules vides fréquentes):

 HEADING  <-- this is A1
kfdsl
fdjgnm
fdkj

gdfkj
4353

fdjk  <-- this is A9
 

J'aimerais pouvoir obtenir la référence de cellule de la dernière cellule contenant des données. Donc, dans l'exemple ci-dessus, je souhaite retourner: A9

J'ai essayé cela, mais cela s'arrête à la première cellule vide (c'est-à-dire, en retournant A4 )

 numofrows = destsheet.Range("A2").End(xlDown).Row - 1
 

49voto

Tomamais Points 473

J'aime cette façon:

ActiveSheet.UsedRange.Rows.Count

La même chose peut être faite avec le nombre de colonnes. Pour moi, travaille toujours. Toutefois, si vous avez des données dans d'autres colonnes, le code ci-dessus les considérera également, car il recherche toutes les plages de cellules de la feuille.

42voto

nixda Points 628

L'option la plus sûre est

 Lastrow =  Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Lastcol =  Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
 

N'utilisez pas UsedRange ou SpecialCells(xlLastCell) ou End(xlUp) . Toutes ces méthodes peuvent donner des résultats erronés si vous avez précédemment supprimé certaines lignes. Excel compte toujours ces cellules invisibles .

Ces méthodes fonctionneront à nouveau si vous supprimez vos cellules, sauvegardez le classeur, fermez-le et ouvrez-le à nouveau.

26voto

Ce sera travaux, indépendamment de la version d'Excel (2003, 2007, 2010). La première a 65536 lignes dans une feuille, tandis que les deux derniers ont un million de lignes ou de manière. Sheet1.Rows.Count retourne ce nombre dépend de la version.

numofrows = Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp).Row

Cette recherche s'effectue à partir du bas de la colonne A, pour la première cellule non vide, et obtient son numéro de ligne.

Cela fonctionne aussi si vous avez des données qui vont au plus bas dans les autres colonnes. Ainsi, par exemple, si vous prenez votre exemple de données et d'écrire quelque chose dans la cellule FY4763, la ci-dessus sera toujours correctement retourner 9 (pas 4763, qui de toute méthode impliquant l' UsedRange de la propriété de manière incorrecte retour).

Notez que vraiment, si vous voulez la référence de cellule, vous devriez utiliser la suite. Vous n'avez pas à d'abord obtenir le numéro de ligne, et ensuite construire la référence de la cellule.

Set rngLastCell = Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp)

19voto

sven Points 155

J'ai comparé toutes les possibilités avec une longue feuille de test:

0,140625 sec pour

 lastrow = calcws.Cells.Find("*", [A1], , , xlByColumns, xlPrevious).row
 

0 seconde pour

 iLastRow = calcws.Cells(rows.count, "a").End(xlUp).row
 

et

 numofrows = calcws.Cells.SpecialCells(xlLastCell).row
 

0,0078125 sec pour

 lastrow = calcws.UsedRange.rows.count
Do While 1
    If calcws.Cells(lastrow, 1).Value = "" Then
        lastrow = lastrow - 1
    Else
        Exit Do
    End If
Loop
 

Je pense que les favoris sont évidents ...

6voto

Lubor Points 59

Dim RowNumber As Integer
RowNumber = ActiveSheet.Range("A65536").End(xlUp).Row

Dans votre cas, il devrait retourner # 9

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X