Ярлыки

(16) 1С 8.3 (1) 2GIS (1) автоактивация (3) Активация (3) Андроид (113) Антивирус (2) Аудио (2) биоритмы (1) Блок питания (22) боль в спине (1) браузер (2) бросить курить (1) буквы соответствие (1) бумажник (1) бюджетирование (1) ВАЗ 2110 (1) вацап (1) видеонаблюдение (8) Видеосвязь (1) гаджет (1) Галстук (1) геокоординаты (1) дача (1) для дома (1) дом (2) драйвера (6) Дубликаты (1) еда (1) запись (1) Зарядка акб (1) Зарядное устройство (1) звук (4) здоровье (8) знаки зодиака (1) зрение (1) игнтернет (1) иероглифы (1) Изделия из дерева (1) Интернет (10) Интернет-магазины (3) Кино (1) ключница (1) Книги Журналы (1) кожаная обувь (4) командная строка (1) конвертор (1) кошелек (1) кресло-качалка (1) кухня (2) Лекарства (1) логика (1) макрос (1) медицина (1) мозги (1) морщины (2) мтс (1) музыка (9) мультики (1) Мыльные_пузыри (1) Натуральная кожа (56) Облако (1) омск (1) Он Лаин библиотеки (1) органайзер (1) оригами (1) Отбеливание (1) отслеживание посылок (1) Папка (1) Пароли (2) пароль (3) партмоне (1) парфюм (1) переименование файлов (1) питание (1) Планшет (5) поза сна (1) поздравление (1) поиск (1) поиск дублей (1) поисковик (1) Полезные сайты (1) портабле (2) принтер (4) Программы (58) простуда (1) расширения (1) редактор музыкальных файлов (1) Русский язык (1) рут (2) сеть (8) Скрыть информацию (1) Стиль (1) стихи (2) сумка (1) суставы (3) теги (1) трек-номер (1) тренинг (1) тренинг памяти (1) удаленный доступ (2) узлы (1) УНЧ (3) Управление компьютером (2) Управленческий учет (2) Успокоительные средства (1) фильмы (2) Флешка (53) фото (2) цвета в одежде (1) цена (1) экран не гаснет (1) эл почта (2) Ютуб (1) Access (10) Acronis True Image WD Edition (1) AliExpress (1) ALT-коды (1) audi (1) Avira Antivirus (1) bat (2) BIOS (4) chrom (15) Chrome (2) Cube iPlay 10 U83 (1) Dism++ (2) epson 1260 (1) ERD Commander (1) Excel (42) Faceter (1) Firefox (1) GHOST32 (4) gif анимация (1) Google (1) Google Hrome (1) Google Play (1) Grub4Dos (7) HDD (1) Honor (1) HP USB Disk Storage Tool (1) IPTV (1) KPI (1) Linux (16) NirCmd (1) office (4) PDF (1) Pinterest (1) portable (2) Prestigio3502 (1) Rufus (2) SSD (1) torrent (1) UEFI (1) VBA (42) WEB ресурсы (2) WiFi (2) Windows (77) Windows 10 (5) Windows 11 (2) Windows 7 (24) YouTube (15)

VBA

Пример определения адреса последней заполненной ячейки, а также номера её строки и столбца.
iAddress = Range("A1").SpecialCells(xlLastCell).Address
iRow = Range("A1").SpecialCells(xlLastCell).Row
iClm = Range("A1").SpecialCells(xlLastCell).Column

Пример определения номера строки и столбца последней заполненной ячейки.
iRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
iClm = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
With ActiveSheet.UsedRange
iRow = .Row + .Rows.Count - 1
iClm = .Column + .Columns.Count - 1
End With
Set iList = ActiveSheet
iRow = iList.UsedRange.Row + iList.UsedRange.Rows.Count - 1
iClm = iList.UsedRange.Column + iList.UsedRange.Columns.Count - 1
Set iDiapazon = ActiveSheet.UsedRange
iRow = iDiapazon.Row + iDiapazon.Rows.Count - 1
iClm = iDiapazon.Column + iDiapazon.Columns.Count - 1
Комментарий :
Так как свойство UsedRange принадлежит об'екту Worksheet, то использование ссылки на этот об'ект обязательно.
Примечание :
Все вышеприведённые примеры определяют последнюю ячейку в активном рабочем листе. Естественно, что мы можем ссылаться и на другие рабочие листы, используя при этом их имя, номер (индекс) или имя в среде VBA ()

===================================================================

Для определения количества заполненных ячеек в смежном диапазоне можно воспользоваться свойством CurrentRegion об'екта Range

Пример определения количества строк и столбцов в смежном с ячейкой диапазоне, а также адрес этого диапазона.
iRow = Columns("A").CurrentRegion.Rows.Count
iClm = Rows(1).CurrentRegion.Columns.Count
iAddress = Range("A1").CurrentRegion.Address
Примечание :
Особенностью свойства CurrentRegion является то, что он возвращает весь диапазон, но только состоящий из смежных ячеек.

Комментарий :
важно При определении последней заполненной строки, этот вариант будет корректно работать только при условии, что данные в строке и столбце начинаются с самой первой ячейки и не содержат пустых строк и столбцов.

Предупреждение :
Если рабочий лист защищён, то использование этого варианта приведёт к возникновению ошибки, которую можно избежать, если воспользоваться этим советом.



Вариант IV.
Для определения номера строки и столбца последней заполненной ячейки можно использовать функцию ПОЛУЧИТЬ.ДОКУМЕНТ (макроязык Excel4.0)

Пример определения номера строки и столбца последней заполненной ячейки в активном рабочем листе.
iRow = ExecuteExcel4Macro("GET.DOCUMENT(10)")
iClm = ExecuteExcel4Macro("GET.DOCUMENT(12)")
Пример определения номера строки и столбца последней заполненной ячейки в активной рабочей книге и конкретном рабочем листе.
iRow = ExecuteExcel4Macro("GET.DOCUMENT(10,""Лист1"")")
iClm = ExecuteExcel4Macro("GET.DOCUMENT(12,""Лист1"")")
Пример определения номера строки и столбца последней заполненной ячейки в конкретной рабочей книге и листе.
iRow = ExecuteExcel4Macro("GET.DOCUMENT(10,""[ОткрытаяКнига.xls]Лист1"")")
iClm = ExecuteExcel4Macro("GET.DOCUMENT(12,""[ОткрытаяКнига.xls]Лист1"")")


Вариант V.
Для определения номера последней заполненной ячейки в конкретной строке или столбце, а также для определения последней заполненной ячейки можно использовать метод Find

Пример определения номера последней заполненной ячейки в конкретной строке и столбце.
On Error Resume Next

iRow = Columns("C").Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
iClm = Rows(10).Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
Пример определения номера строки и столбца последней заполненной ячейки.
On Error Resume Next

iRow = Cells.Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
iClm = Cells.Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
Примечание :
Вышеупомянутый синтаксис может вызвать ошибку, если указанный диапазон не содержит данных. Для того, чтобы этого избежать, во всех примерах использован "режим отложенной ошибки" On Error Resume Next
Однако, можно использовать и другой синтаксис, например :
Set iLastCell = Cells.Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByRows)

If Not iLastCell Is Nothing Then
   iRow = iLastCell.Row
   iClm = iLastCell.Column
End If
Set iLastCell = Cells.Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByRows)

If TypeName(iLastCell) <> "Nothing" Then
   iRow = iLastCell.Row
   iClm = iLastCell.Column
End If
Комментарий :
важно Этот вариант будет корректно работать только при условии, что ячейки не содержат формул, которые возвращают пустую строку "" или апостроф '



Вариант VI.
Для определения номера последней заполненной ячейки в конкретной строке или столбце можно воспользоваться свойством End об'екта Range и специальными константами xlToRightxlDown

Пример определения номера последней заполненной ячейки в конкретной строке и столбце.
iRow = Columns(3).End(xlDown).Row
iRow = Columns("C").End(xlDown).Row
iClm = Rows(10).End(xlToRight).Column
Комментарий :
важно Этот вариант будет корректно работать только при условии, что данные в строке, или столбце начинаются с самой первой ячейки и не содержат пустых ячеек.



Вариант VII.
Тот же самый способ, что и предыдущий, но с небольшими изменениями.

Пример определения номера последней заполненной ячейки в конкретной строке и столбце.
iRow = Cells(65536, 3).End(xlUp).Row
iRow = Cells(65536, "C").End(xlUp).Row
iClm = Cells(10, 256).End(xlToLeft).Column

iRow = Cells(Rows.Count, 3).End(xlUp).Row
iRow = Cells(Rows.Count, "C").End(xlUp).Row
iClm = Cells(10, Columns.Count).End(xlToLeft).Column
В зависимости от Вашего кода можно применять различные подварианты, например :
iRow = Columns(3).Rows(65536).End(xlUp).Row
iRow = Columns("C").Rows(65536).End(xlUp).Row
Комментарий :
важно Этот вариант будет работать при любых условиях, так как маловероятно, что последней заполненной ячейкой окажется именно последняя ячейка в столбце, однако и эту вероятность можно учесть :
Const iMaxRow = 65536 ' 97, 2000

With Worksheets(1).Cells(iMaxRow, 1)
     If IsEmpty(.Value) = True Then
        iRow = .End(xlUp).Row
     Else
        iRow = iMaxRow
     End If
End With


Вариант VIII.
Некоторые люди используют для определения последней заполненной строки в определённом столбце стандартную функцию рабочего листаСЧЁТЗ

Пример определения номера последней заполненной ячейки в конкретном столбце.
iRow = Application.CountA(Columns(3))
iRow = Application.CountA(Columns("C"))
iRow = WorksheetFunction.CountA(Columns(3))
iRow = Excel.Application.CountA(Columns("C"))
iRow = Excel.WorksheetFunction.CountA(Columns(3))
iRow = Application.WorksheetFunction.CountA(Columns("C"))
Комментарий :
важно Так как функция СЧЁТЗ считает количество непустых ячеек, то этот вариант будет корректно работать только при условии, что данные в столбце начинаются с самой первой ячейки и не содержат пустых ячеек.



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

Причём, в случае применения первого, второго или четвёртого варианта, необходимо помнить, что последними могут считаться ячейки, параметры форматирования которых, отличаются от изначально установленных.

Дополнение :
Для того чтобы Ваш макрос стал более понятным, лучше использовать имена переменных, несущих смысловую нагрузку и поэтому именовать номер строки последней ячейки не iRow, а iRowLast, а номер столбца не iClm, а iClmLast.

Тогда цикл по строкам будет выглядеть примерно так :

For iRow = 1 To iRowLast

Next
 

Комментариев нет:

Отправить комментарий