Вопрос:
Мне просто интересно, можете ли вы помочь мне лучше понять, что делает .Cells(.Rows.Count,»A»).End(xlUp).row. Я понимаю часть перед частью .End.
Лучший ответ:
Он используется для определения того, сколько строк содержит данные на листе, который содержит данные в столбце “А”. Полное использование
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 возвращает индекс строки этой ячейки.
Ответ №1[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) по причинам совместимости в книгах с различным количеством строк.
Ответ №2
Первая часть:
.Cells(.Rows.Count,»A»)
Отправляет вас в нижнюю строку столбца A, о которой вы уже знали.
Функция End начинается в ячейке, а затем, в зависимости от направления, которое вы указываете, идет в этом направлении, пока не достигнет края группы ячеек, у которых есть текст. Значение, если у вас есть текст в ячейках C4: E4, и вы вводите:
Sheet1.Cells(4,»C»).End(xlToRight).Select
Программа выберет E4, самую правую ячейку с текстом в ней.
В вашем случае код выплевывает строку самой последней ячейки с текстом в ней в столбце A. Помогает ли это?
Ответ №3.Cells(.Rows.Count,»A»).End(xlUp).row
Я думаю, что первая точка в скобках не должна быть там, я имею в виду, вы должны написать ее следующим образом:
.Cells(Rows.Count,»A»).End(xlUp).row
Перед ячейками вы можете написать имя своего листа, например:
Worksheets(«sheet1»).Cells(Rows.Count, 2).End(xlUp).row
Имя рабочего листа не обязательно, если вы работаете на том же рабочем листе.