Sens de l'.Cellule(.Rangée.Le Comte,"Un").End(xlUp).rangée
Je me demandais si vous pouviez m'aider à mieux comprendre ce que fait .Cells(.Rows.Count,"A").End(xlUp).row
. Je comprends la partie avant la partie .End
.
4 réponses
Il est utilisé pour trouver le nombre de lignes contenant des données dans une feuille de calcul qui contient 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 Feuille de calcul. Dans l'exemple des questions, il était implicite que l'instruction se trouvait dans un bloc With
With ws
lastRowIndex = .Cells(.Rows.Count, "A").End(xlUp).row
End With
-
ws.Rows.Count
renvoie le nombre total de lignes dans 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 calcul
Ensuite, il y a le End
méthode. La documentation {[22] } est ambiguë quant à ce qu'elle fait.
Renvoie un objet Range qui représente la cellule à la fin de la région qui contient 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 gamme contiguë de cellules non vides. Si l'utilisation prévue est de commencer à partir d'une cellule dans une région et de trouver la dernière cellule de la région en direction de la cellule d'origine. Cependant, il existe plusieurs exceptions pour quand vous ne l'utilisez pas comme ça:
- si la plage est composée de plusieurs cellules, elle utilisera la région de
rng.cells(1,1)
. - si la plage n'est pas dans une région, ou si la plage est déjà à la fin de la région, elle se déplace dans la direction jusqu'à ce qu'elle entre dans une région et retourne la première cellule rencontrée dans cette région.
- S'il rencontre le bord de la feuille de calcul, il retournera la cellule sur le bord de cette feuille de calcul.
Donc Range.End
n'est pas une mince fonction.
-
.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 d'appuyer sur Ctrl + n'importe quelle touche fléchée. Il continuera à voyager dans cette direction jusqu'à ce qu'il frappe la dernière cellule de données, ou si vous utilisez cette commande pour passer d'une cellule est la dernière cellule de données, le déplacement jusqu'à ce qu'il frappe le côté de la cellule contenant les données.
Si vous voulez trouver cette dernière cellule "utilisée" dans la colonne A, vous pouvez aller à A65536 (par exemple, dans un classeur XL93-97) et appuyez sur Ctrl + Up pour "aligner" sur le dernière cellule utilisée. Ou en VBA vous écririez:
Range("A65536").End(xlUp)
qui peut à nouveau être réécrit comme Range("A" & Rows.Count).End(xlUp)
pour des raisons de compatibilité entre les classeurs avec différents nombres de lignes.
La première partie:
.Cells(.Rows.Count,"A")
Vous envoie à la rangée du bas de la colonne A, que vous connaissiez déjà.
La fonction de fin commence à une cellule, puis, selon la direction que vous lui dites, va dans cette direction jusqu'à ce qu'elle atteigne le bord d'un groupe de cellules qui ont 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 contenant du texte.
Dans votre cas, le code crache la ligne du tout dernier cellule avec du texte dans la colonne A. Cela aide-t-il?
.Cells(.Rows.Count,"A").End(xlUp).row
Je pense que le premier point dans la parenthèse 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.