Подтвердить что ты не робот

Значение .Cells(.Rows.Count, "A" ). End (xlUp).row

Мне просто интересно, можете ли вы помочь мне лучше понять, что делает .Cells(.Rows.Count,"A").End(xlUp).row. Я понимаю часть перед частью .End.

4b9b3361

Ответ 1

Он используется для определения того, сколько строк содержит данные на листе, который содержит данные в столбце "А". Полное использование

 lastRowIndex = ws.Cells(ws.Rows.Count, "A").End(xlUp).row

Где ws - объект Worksheet. В примере вопросов подразумевалось, что оператор находился внутри блока With

With ws
    lastRowIndex = .Cells(.Rows.Count, "A").End(xlUp).row
End With
  • ws.Rows.Count возвращает общее количество строк на листе (1048576 в Excel 2010).
  • .Cells(.Rows.Count, "A") возвращает нижнюю часть ячейки в столбце "A" на листе

Тогда существует метод End. Документация неоднозначна относительно того, что она делает.

Возвращает объект Range, который представляет ячейку в конце области, содержащей исходный диапазон

В частности, он не определяет, что такое "регион". Мое понимание - это область непрерывного диапазона непустых ячеек. Таким образом, ожидаемое использование должно начинаться с ячейки в регионе и находить последнюю ячейку в этой области в этом направлении от исходной ячейки. Однако есть несколько исключений, если вы не используете его так:

  • Если диапазон - несколько ячеек, он будет использовать область rng.cells(1,1).
  • Если диапазон не находится в регионе или диапазон уже находится в конце области, он будет перемещаться в направлении, пока он не войдет в область и не вернет первую обнаруженную ячейку в этом регионе.
  • Если он встречает край листа, он вернет ячейку на границе этого рабочего листа.

Итак, Range.End не является тривиальной функцией.

  1. .row возвращает индекс строки этой ячейки.

Ответ 2

[A1].End(xlUp)
[A1].End(xlDown)
[A1].End(xlToLeft)
[A1].End(xlToRight)

- эквивалент VBA, находящийся в ячейке A1, и нажатие клавиши Ctrl + Любая стрелка. Он будет продолжать перемещаться в этом направлении до тех пор, пока он не попадет в последнюю ячейку данных, или если вы используете эту команду для перемещения из ячейки, которая является последней ячейкой данных, она будет перемещаться, пока она не попадет в следующую ячейку, содержащую данные.

Если вы хотите найти эту последнюю "использованную" ячейку в столбце A, вы можете перейти на A65536 (например, в книгу XL93-97) и нажать Ctrl + Up для "привязки" к последней используемой ячейке. Или в VBA вы напишете:

Range("A65536").End(xlUp), который снова может быть переписан как Range("A" & Rows.Count).End(xlUp) по причинам совместимости в книгах с различным количеством строк.

Ответ 3

Первая часть:

.Cells(.Rows.Count,"A")

Отправляет вас в нижнюю строку столбца A, о которой вы уже знали.

Функция End начинается в ячейке, а затем, в зависимости от направления, которое вы указываете, идет в этом направлении, пока не достигнет края группы ячеек, у которых есть текст. Значение, если у вас есть текст в ячейках C4: E4, и вы вводите:

Sheet1.Cells(4,"C").End(xlToRight).Select

Программа выберет E4, самую правую ячейку с текстом в ней.

В вашем случае код выплевывает строку самой последней ячейки с текстом в ней в столбце A. Помогает ли это?

Ответ 4

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

Я думаю, что первая точка в скобках не должна быть там, я имею в виду, вы должны написать ее следующим образом:

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

Перед ячейками вы можете написать имя своего листа, например:

Worksheets("sheet1").Cells(Rows.Count, 2).End(xlUp).row

Имя рабочего листа не обязательно, если вы работаете на том же рабочем листе.