web-dev-qa-db-fra.com

Signification de .Cells (.Rows.Count, "A"). End (xlUp) .row

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.

26
rmdlp

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

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
  1. ws.Rows.Count renvoie le nombre total de lignes de la feuille de calcul (1048576 dans Excel 2010).
  2. .Cells(.Rows.Count, "A") renvoie la cellule la plus basse de la colonne "A" de la feuille de calcul

Ensuite, 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:

  • Si la plage est constituée de plusieurs cellules, la région rng.cells(1,1) sera utilisée.
  • Si la plage ne se trouve pas dans une région ou si elle se trouve déjà à la fin de la région, elle suivra la direction jusqu'à entrer dans une région et renverra la première cellule rencontrée dans cette région.
  • S'il rencontre le bord de la feuille de calcul, il retournera la cellule située sur le bord de la feuille de calcul.

Donc, Range.End n’est pas une fonction triviale.

  1. .row renvoie l'index de ligne de cette cellule.
41
cheezsteak
[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.

19
Sam

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?

8
rpalo
.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.

2
user5331486