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.

21
demandé sur Community 2014-11-21 19:20:22

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

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
  1. ws.Rows.Count renvoie le nombre total de lignes dans 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 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.

  1. .row renvoie l'index de ligne de cette cellule.
35
répondu cheezsteak 2014-11-21 19:40:35
[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.

14
répondu Sam 2015-09-24 18:17:21

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?

8
répondu rpalo 2014-11-21 16:44:32
.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.

1
répondu user5331486 2015-09-13 19:16:38