Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обход столбца Excel объектом Range - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обход столбца Excel объектом Range (Макросы/Sub)
Обход столбца Excel объектом Range
DataBase Дата: Понедельник, 24.12.2018, 22:14 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Как можно с помощью объекта Range осуществить проход по нужному столбцу до тех пор пока не дойдём до пустой ячейки наподобие вот этого

[vba]
Код
Dim i As Integer
i = 1
Do While (Cells(i, 3) <> "")
i = i + 1
Loop
[/vba]


Сообщение отредактировал DataBase - Понедельник, 24.12.2018, 23:42
 
Ответить
СообщениеКак можно с помощью объекта Range осуществить проход по нужному столбцу до тех пор пока не дойдём до пустой ячейки наподобие вот этого

[vba]
Код
Dim i As Integer
i = 1
Do While (Cells(i, 3) <> "")
i = i + 1
Loop
[/vba]

Автор - DataBase
Дата добавления - 24.12.2018 в 22:14
Alex_ST Дата: Пятница, 28.12.2018, 14:18 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
А без цикла?
Например, так[vba]
Код
ActiveSheet.Cells(5, 2).End(xlDown).Address     ' последняя заполненная ячейка в столбце В, начиная с 5-й строки
[/vba]или так [vba]
Код
ActiveSheet.Cells.SpecialCells(xlLastCell).Address
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА без цикла?
Например, так[vba]
Код
ActiveSheet.Cells(5, 2).End(xlDown).Address     ' последняя заполненная ячейка в столбце В, начиная с 5-й строки
[/vba]или так [vba]
Код
ActiveSheet.Cells.SpecialCells(xlLastCell).Address
[/vba]

Автор - Alex_ST
Дата добавления - 28.12.2018 в 14:18
KuklP Дата: Пятница, 28.12.2018, 16:34 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Alex_ST привет, друже. Леш, маленькая поправка, скорей это будет последняя заполненная ячейка в столбце В, в блоке(areas), в котором находится 5-я ячейка. Т.е. это не обязательно будет последняя заполненная ячейка в столбце В. Ниже могут располагаться еще множество заполненных ячеек\блоков, разделяемых пустыми ячейками\блоками)) Если нужно именно последнюю в столбце В, то надо использовать End(xlUp) от низа столбца.
Мы же не знаем какой вариант нужен автору..


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеAlex_ST привет, друже. Леш, маленькая поправка, скорей это будет последняя заполненная ячейка в столбце В, в блоке(areas), в котором находится 5-я ячейка. Т.е. это не обязательно будет последняя заполненная ячейка в столбце В. Ниже могут располагаться еще множество заполненных ячеек\блоков, разделяемых пустыми ячейками\блоками)) Если нужно именно последнюю в столбце В, то надо использовать End(xlUp) от низа столбца.
Мы же не знаем какой вариант нужен автору..

Автор - KuklP
Дата добавления - 28.12.2018 в 16:34
DataBase Дата: Пятница, 28.12.2018, 18:35 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Алексей всё правильно сделал согласно заданию последняя заполненная ячейка
 
Ответить
СообщениеАлексей всё правильно сделал согласно заданию последняя заполненная ячейка

Автор - DataBase
Дата добавления - 28.12.2018 в 18:35
Alex_ST Дата: Суббота, 29.12.2018, 09:27 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Вообще-то существует несколько методов нахождения последней ячейки "одним махом".
У каждого из них есть свои недостатки. Универсального нет.
Для того, чтобы каждый раз не рыться в литературе, форумах и извилинах :) я сделал для себя такую шпаргалку и положил её в 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]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеВообще-то существует несколько методов нахождения последней ячейки "одним махом".
У каждого из них есть свои недостатки. Универсального нет.
Для того, чтобы каждый раз не рыться в литературе, форумах и извилинах :) я сделал для себя такую шпаргалку и положил её в 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]

Автор - Alex_ST
Дата добавления - 29.12.2018 в 09:27
Alex_ST Дата: Суббота, 29.12.2018, 09:37 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
KuklP, привет, Серёга!
Давно я здесь не тусил: на работе завал текучки непрерывный, прав Администратора собаки-сисадмины на работе лишили, и я теперь не только скачивать файлы с макросами не могу, но даже ни кракозябры при копировании кириллицы исправить не могу, ни ActiveX в любимом 2003-ем починить :'( , да и личные и семейные :D телефоны и планшеты на Android'e нужно постоянно "полировать"... Поэтому я теперь в основном в свободное время на 4PDA тусуюсь.
А твоё замечание
Мы же не знаем какой вариант нужен автору..
абсолютно верное. Но каков вопрос, таков и ответ.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Суббота, 29.12.2018, 09:39
 
Ответить
СообщениеKuklP, привет, Серёга!
Давно я здесь не тусил: на работе завал текучки непрерывный, прав Администратора собаки-сисадмины на работе лишили, и я теперь не только скачивать файлы с макросами не могу, но даже ни кракозябры при копировании кириллицы исправить не могу, ни ActiveX в любимом 2003-ем починить :'( , да и личные и семейные :D телефоны и планшеты на Android'e нужно постоянно "полировать"... Поэтому я теперь в основном в свободное время на 4PDA тусуюсь.
А твоё замечание
Мы же не знаем какой вариант нужен автору..
абсолютно верное. Но каков вопрос, таков и ответ.

Автор - Alex_ST
Дата добавления - 29.12.2018 в 09:37
KuklP Дата: Суббота, 29.12.2018, 09:41 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Добавь в свою шпаргалку:
[vba]
Код
Set x = Cells.Find("*", [a1], xlFormulas, 1, 1, 2)
[/vba]предпоследний параметр отвечает - что искать, строку или столбец. yes


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеДобавь в свою шпаргалку:
[vba]
Код
Set x = Cells.Find("*", [a1], xlFormulas, 1, 1, 2)
[/vba]предпоследний параметр отвечает - что искать, строку или столбец. yes

Автор - KuklP
Дата добавления - 29.12.2018 в 09:41
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обход столбца Excel объектом Range (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!