Страницы: 1
RSS
Как определить номера строк всех выделенных ячеек.
 
Добрый день.
В столбике "А" выделены ячейки с помощью Ctrl+ПМ.
-Как получить номера строк выделенных ячеек и перенести эти номера в массив?
-Какое меняется свойство ячейки когда ее выделяют ?
Спасибо!
Быстрее молнии, быстрее ветра, быстрее калькулятора
 
Код
Sub test()
  Dim c As Range
  For Each c In Selection.Cells
    Debug.Print c.Address
  Next c
End Sub

При выделении ячеек изменяется объект Selection.
Владимир
 
Цитата
Borrusale написал:
номера строк
Код
Sub GetRows()
a = Split(Selection.Address, "$")
ReDim aa(UBound(a) \ 2 - 1) As Long
For r = 0 To UBound(a) - 2 Step 2
  'Debug.Print a(r + 2)
  aa(r \ 2) = a(r + 2)
Next r
End Sub
 
Смотрит в этом направлениии
Код
for each r in selection : debug.print r.row : next

, но могут быть дубликаты.
По вопросам из тем форума, личку не читаю.
 
В случае выделения несвязных диапазонов вариант #3 работать не будет.
Владимир
 
sokol92 а в случае многократных выделений, дублей будет еще больше. Без коллнкции или словаря наверно не обойтись.
Изменено: БМВ - 20.10.2019 18:27:06
По вопросам из тем форума, личку не читаю.
 
Михаил, согласен. Если интересуют только номера строк, то цикл будет быстрее по Selection.Rows
Владимир
 
Владимир, а вот тут  не уверен.
По вопросам из тем форума, личку не читаю.
 
Кот учёл замечания Влада и Миши )
Кот молодец.
 
Borrusale, функция для получения списка строк/столбцов из любого диапазона. Должно быть очень быстро
3 функции и тестовая процедура для выделенного диапазона
использованы универсальные функции (отсюда) для преобразования диапазона чисел в последовательность. Для получения строк/столбцов их можно сильно упростить
Изменено: Jack Famous - 21.10.2019 12:44:05
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,  Алексей, н
Цитата
Jack Famous написал:
Должно быть очень быстро
Я уж не знаю результат каков, но подключи то, другое, поставь третье. ……   Не очень сложно для проcтой задачи?
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: Не очень сложно для проcтой задачи?
не берусь определять категорию сложности - просто ещё один вариант  :)
    1. у меня функции сидят в надстройке, библиотеки к ней также уже подключены
    2. получение всех строк/столбцов диапазона у меня занимает 1 строку
    3. присутствует множество проверок для перестраховки, при этом снижение скорости работы незаметно
    4. единственное полностью рабочее решение по вопросу дал Юрий М, т.к. sokol92 дал наводку, а уАпостроффа вообще вариант только для областей не более 1 ячейки (присутствие диапазона через ":" никак не обрабатывается плюс нет контроля уникальных). С другой стороны, вопрос был "как получить" и они на это ответили  :D

    Итого: коды всякие нужны, коды всякие важны)) я показал принципиально другой подход с быстрым отбором номеров строк/столбцов из адреса с помощью регулярных выражений
Есть контроль уникальных и сортировка полученных номеров по возрастанию
На диапазоне от 1000 ячеек прогнозирую существенный выигрыш в скорости
Да - для этого конкретного случая функции преобразования диапазонов чисел в список можно сильно упростить (как я и написал), но это уже другой вопрос :D
Изменено: Jack Famous - 21.10.2019 14:56:03
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Алексей, а какой результат при таком выделении?

 
По вопросам из тем форума, личку не читаю.
 
БМВ, если вы про перекрытие выделений, то словари это решают)

UPD: сделал файл для теста (всё корректно работает)
Модуль с тестовой процедурой
Модуль с основным кодом
Изменено: Jack Famous - 21.10.2019 15:13:04
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
НОВАЯ ВЕРСИЯ

Из-за того, что адрес диапазона не может быть более 255 символов (тут подробнее), метод, описанный мною не может быть применён для таких адресов (например видимые ячейки в фильтре).
Метод от Юрия сработает, т.к. там перебор ячеек "в лоб"

Добавил ещё одну функцию и немного подкорректировал имеющиеся:
Модуль с тестовой процедурой
Основной модуль с функциями
Время работы: 43 мс (0,043 сек) на 5 000 одиночных ячеек
Изменено: Jack Famous - 22.10.2019 12:34:21
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх