Мне просто интересно, можете ли вы помочь мне лучше понять, что делает .Cells(.Rows.Count,"A").End(xlUp).row
. Я понимаю часть перед частью .End
.
Значение .Cells(.Rows.Count, "A" ). End (xlUp).row
Ответ 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
не является тривиальной функцией.
-
.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
Имя рабочего листа не обязательно, если вы работаете на том же рабочем листе.