Je me demandais si vous pouviez m'aider à mieux comprendre ce que .Cells(.Rows.Count,"A").End(xlUp).row
fait. Je comprends la partie précédant la partie .End
.
Il est utilisé pour rechercher le nombre de lignes contenant des données dans une feuille de calcul contenant des données dans la colonne "A". L'utilisation complète est
lastRowIndex = ws.Cells(ws.Rows.Count, "A").End(xlUp).row
Où ws
est un objet de la feuille de calcul. Dans l'exemple de questions, il était sous-entendu que la déclaration se trouvait à l'intérieur d'un bloc With
With ws
lastRowIndex = .Cells(.Rows.Count, "A").End(xlUp).row
End With
ws.Rows.Count
renvoie le nombre total de lignes de la feuille de calcul (1048576 dans Excel 2010)..Cells(.Rows.Count, "A")
renvoie la cellule la plus basse de la colonne "A" de la feuille de calculEnsuite, il y a la méthode End
. Le documentation est ambigu sur ce qu'il fait.
Renvoie un objet Range représentant la cellule à la fin de la région contenant la plage source.
En particulier, cela ne définit pas ce qu'est une "région". Ma compréhension est qu'une région est une plage contiguë de cellules non vides. Donc, l'utilisation attendue est de partir d'une cellule d'une région et de trouver la dernière cellule de cette région dans cette direction depuis la cellule d'origine. Cependant, il existe plusieurs exceptions lorsque vous ne l'utilisez pas comme ça:
rng.cells(1,1)
sera utilisée.Donc, Range.End
n’est pas une fonction triviale.
.row
renvoie l'index de ligne de cette cellule.[A1].End(xlUp)
[A1].End(xlDown)
[A1].End(xlToLeft)
[A1].End(xlToRight)
est l'équivalent VBA d'être dans la cellule A1 et en appuyant sur Ctrl + Toute touche fléchée. Il continuera à voyager dans cette direction jusqu'à atteindre la dernière cellule de données, ou si vous utilisez cette commande pour passer d'une cellule qui est la dernière cellule de données qu'il parcourra jusqu'à ce qu'elle atteigne la prochaine cellule contenant des données.
Si vous voulez trouver la dernière cellule "utilisée" dans la colonne A, vous pouvez aller à A65536 (par exemple, dans un classeur XL93-97) et appuyer sur Ctrl + Haut pour "aligner" la dernière cellule utilisée. Ou dans VBA, vous écririez:
Range("A65536").End(xlUp)
qui peut à nouveau être ré-écrit en tant que Range("A" & Rows.Count).End(xlUp)
pour des raisons de compatibilité entre classeurs comportant un nombre différent de lignes.
La première partie:
.Cells(.Rows.Count,"A")
Vous envoie à la dernière ligne de la colonne A, que vous connaissiez déjà.
La fonction End commence à une cellule et ensuite, en fonction de la direction que vous lui indiquez, va dans cette direction jusqu'à ce qu'elle atteigne le bord d'un groupe de cellules contenant du texte. Signification, si vous avez du texte dans les cellules C4: E4 et que vous tapez:
Sheet1.Cells(4,"C").End(xlToRight).Select
Le programme sélectionnera E4, la cellule la plus à droite avec du texte.
Dans votre cas, le code crache la dernière ligne de la dernière cellule contenant du texte dans la colonne A. Cela vous aide-t-il?
.Cells(.Rows.Count,"A").End(xlUp).row
Je pense que le premier point entre parenthèses ne devrait pas être là, je veux dire, vous devriez l'écrire de cette façon:
.Cells(Rows.Count,"A").End(xlUp).row
Avant les cellules, vous pouvez écrire le nom de votre feuille de calcul, par exemple:
Worksheets("sheet1").Cells(Rows.Count, 2).End(xlUp).row
Le nom de la feuille de calcul n’est pas nécessaire lorsque vous utilisez la même feuille de calcul.