Alex_ST привет, друже. Леш, маленькая поправка, скорей это будет последняя заполненная ячейка в столбце В, в блоке(areas), в котором находится 5-я ячейка. Т.е. это не обязательно будет последняя заполненная ячейка в столбце В. Ниже могут располагаться еще множество заполненных ячеек\блоков, разделяемых пустыми ячейками\блоками)) Если нужно именно последнюю в столбце В, то надо использовать End(xlUp) от низа столбца. Мы же не знаем какой вариант нужен автору..
Alex_ST привет, друже. Леш, маленькая поправка, скорей это будет последняя заполненная ячейка в столбце В, в блоке(areas), в котором находится 5-я ячейка. Т.е. это не обязательно будет последняя заполненная ячейка в столбце В. Ниже могут располагаться еще множество заполненных ячеек\блоков, разделяемых пустыми ячейками\блоками)) Если нужно именно последнюю в столбце В, то надо использовать End(xlUp) от низа столбца. Мы же не знаем какой вариант нужен автору..KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Вообще-то существует несколько методов нахождения последней ячейки "одним махом". У каждого из них есть свои недостатки. Универсального нет. Для того, чтобы каждый раз не рыться в литературе, форумах и извилинах я сделал для себя такую шпаргалку и положил её в Personal, чтобы всегда была под рукой (у меня там создан целый модуль Example с разными ходовыми примерами и решениями, а т.к. все процедуры объявлены Private , то они нигде не "светятся") [vba]
Код
Private Sub LAST_CELL() ' последняя ячейка используемого диапазона на листе ' http://msoffice.nm.ru/article/lastcell.htm - "Поиск последней заполненной ячейки" ' http://www.excel-vba.ru/chto-umeet-excel/kak-opredelit-poslednyuyu-yachejku-na-liste-cherez-vba/ - Как определить последнюю ячейку на листе через VBA? Dim sLastAddr$, lLastRow&, iLastCol% 'With Sheets("Лист1") With ActiveSheet 'МЕТОД 1: определяется последняя ячейка В ЗАДАННОМ СТОЛБЦЕ/СТРОКЕ 'НО игнорируются скрытые строки/столбцы (шириной/высотой, группировкой, фильтром …) lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'lLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 'lLastRow = .Range("A" & Rows.Count).End(xlUp).Row iLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column sLastAddr = .Cells(.Rows.Count, 1).End(xlUp).Address 'sLastAddr = .Cells(.Rows.Count, "A").End(xlUp).Address 'Arr = Range("A1:A" & Cells(Rows.Count, "C").End(xlUp).Row).Value
lLastRow = .Cells(5, 2).End(xlDown).Row ' последняя заполненная ячейка в столбце В, начиная с 5-й строки
'МЕТОД 2: МОЖЕТ СЧИТАТЬ НЕ ВЕРНО в файле, не сохранённом после удаления последней ячейки, _ а также может учесть пустую, но форматированную ячейку (заливка, границы, УФ, …) 'правильно работает в только что созданном документе, _ в котором только добавляются данные в строки/столбцы lLastRow = .Cells.SpecialCells(xlLastCell).Row iLastCol = .Cells.SpecialCells(xlLastCell).Column sLastAddr = .Cells.SpecialCells(xlLastCell).Address
'МЕТОД 3: те же недостатки, что и у метода 2… Но т.к. есть обращение к UsedRange, то считает верно! lLastRow = .UsedRange.Row + .UsedRange.Rows.Count - 1 iLastCol = .UsedRange.Column + .UsedRange.Columns.Count - 1 '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' Переопределить текущее положение последней ячейки можно просто обратившись к UsedRange: With .UsedRange: End With 'или так: lLastRow = .UsedRange.Cells.SpecialCells(xlLastCell).Row iLastCol = .UsedRange.Cells.SpecialCells(xlLastCell).Column sLastAddr = .UsedRange.Cells.SpecialCells(xlLastCell).Address End With End Sub
[/vba]
Вообще-то существует несколько методов нахождения последней ячейки "одним махом". У каждого из них есть свои недостатки. Универсального нет. Для того, чтобы каждый раз не рыться в литературе, форумах и извилинах я сделал для себя такую шпаргалку и положил её в Personal, чтобы всегда была под рукой (у меня там создан целый модуль Example с разными ходовыми примерами и решениями, а т.к. все процедуры объявлены Private , то они нигде не "светятся") [vba]
Код
Private Sub LAST_CELL() ' последняя ячейка используемого диапазона на листе ' http://msoffice.nm.ru/article/lastcell.htm - "Поиск последней заполненной ячейки" ' http://www.excel-vba.ru/chto-umeet-excel/kak-opredelit-poslednyuyu-yachejku-na-liste-cherez-vba/ - Как определить последнюю ячейку на листе через VBA? Dim sLastAddr$, lLastRow&, iLastCol% 'With Sheets("Лист1") With ActiveSheet 'МЕТОД 1: определяется последняя ячейка В ЗАДАННОМ СТОЛБЦЕ/СТРОКЕ 'НО игнорируются скрытые строки/столбцы (шириной/высотой, группировкой, фильтром …) lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'lLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 'lLastRow = .Range("A" & Rows.Count).End(xlUp).Row iLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column sLastAddr = .Cells(.Rows.Count, 1).End(xlUp).Address 'sLastAddr = .Cells(.Rows.Count, "A").End(xlUp).Address 'Arr = Range("A1:A" & Cells(Rows.Count, "C").End(xlUp).Row).Value
lLastRow = .Cells(5, 2).End(xlDown).Row ' последняя заполненная ячейка в столбце В, начиная с 5-й строки
'МЕТОД 2: МОЖЕТ СЧИТАТЬ НЕ ВЕРНО в файле, не сохранённом после удаления последней ячейки, _ а также может учесть пустую, но форматированную ячейку (заливка, границы, УФ, …) 'правильно работает в только что созданном документе, _ в котором только добавляются данные в строки/столбцы lLastRow = .Cells.SpecialCells(xlLastCell).Row iLastCol = .Cells.SpecialCells(xlLastCell).Column sLastAddr = .Cells.SpecialCells(xlLastCell).Address
'МЕТОД 3: те же недостатки, что и у метода 2… Но т.к. есть обращение к UsedRange, то считает верно! lLastRow = .UsedRange.Row + .UsedRange.Rows.Count - 1 iLastCol = .UsedRange.Column + .UsedRange.Columns.Count - 1 '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' Переопределить текущее положение последней ячейки можно просто обратившись к UsedRange: With .UsedRange: End With 'или так: lLastRow = .UsedRange.Cells.SpecialCells(xlLastCell).Row iLastCol = .UsedRange.Cells.SpecialCells(xlLastCell).Column sLastAddr = .UsedRange.Cells.SpecialCells(xlLastCell).Address End With End Sub
KuklP, привет, Серёга! Давно я здесь не тусил: на работе завал текучки непрерывный, прав Администратора собаки-сисадмины на работе лишили, и я теперь не только скачивать файлы с макросами не могу, но даже ни кракозябры при копировании кириллицы исправить не могу, ни ActiveX в любимом 2003-ем починить , да и личные и семейные телефоны и планшеты на Android'e нужно постоянно "полировать"... Поэтому я теперь в основном в свободное время на 4PDA тусуюсь. А твоё замечание
KuklP, привет, Серёга! Давно я здесь не тусил: на работе завал текучки непрерывный, прав Администратора собаки-сисадмины на работе лишили, и я теперь не только скачивать файлы с макросами не могу, но даже ни кракозябры при копировании кириллицы исправить не могу, ни ActiveX в любимом 2003-ем починить , да и личные и семейные телефоны и планшеты на Android'e нужно постоянно "полировать"... Поэтому я теперь в основном в свободное время на 4PDA тусуюсь. А твоё замечание