Найти тему
VBA Excel с нуля

VBA Excel № 112.2 Выделяем диапазон и идентифицируем его тип (ч. 2).

Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Доброго времени суток уважаемые читатели! В этой статье мы рассмотрим процедуру ОписаниеОбластей (для определения типа выделенного диапазона и проверки наличия множественных областей). Часть кода была описана в прошлой статье 112.1, а там же мы разобрали функцию ТипОбласти. Итак:

Продолжение кода ниже
Продолжение кода ниже
Продолжение кода ниже
Продолжение кода ниже
Продолжение кода ниже
Продолжение кода ниже
Продолжение кода ниже
Продолжение кода ниже
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Разберем код напротив фигурных скобок

Данный фрагмент кода отвечает за определение и анализ типов выделенных диапазонов в Excel.

  • КоличествоОбластей = Selection.Areas.Count: Здесь определяется количество выделенных областей в текущем выделении.
  • If КоличествоОбластей = 1 Then: Проверяется условие: если количество областей равно 1, то выполняются следующие действия.
  • ТипВыделения = "Одиночное выделение": Если выделена только одна область, устанавливается тип выделения как "Одиночное выделение".
  • Else: В случае, если количество областей не равно 1, выполняется следующий блок кода.
  • ТипВыделения = "Множественное выделение": Если выделено более одной области, устанавливается тип выделения как "Множественное выделение".
  • ПервыйТипВыделения = ТипОбласти(Selection.Areas(1)): Определяется тип первой области в выделении с использованием функции ТипОбласти и сохраняется в переменной ПервыйТипВыделения.
  • ВыбранныйТипВыделения = ПервыйТипВыделения: Инициализируется переменная ВыбранныйТипВыделения значением типа первой области.
  • Set ДиапазонСоединений = Selection.Areas(1): Создается объединенный диапазон, начиная с первой области, чтобы избежать двойного подсчета при последующих итерациях.
  • For Each Area In Selection.Areas: Запускается цикл по всем областям в выделении.
  • ТекущийТипВыделения = ТипОбласти(Area): Определяется тип текущей области с использованием функции ТипОбласти и сохраняется в переменной ТекущийТипВыделения.
  • If ТекущийТипВыделения = "Блок" Then КоличествоБлоков = КоличествоБлоков + 1: Если текущая область является блоком, увеличивается счетчик блоков.
  • Set ДиапазонСоединений = Union(ДиапазонСоединений, Area): Обновляется объединенный диапазон, добавляя текущую область.
  • If ТекущийТипВыделения <> ПервыйТипВыделения Then ВыбранныйТипВыделения = "Смешанный": Если текущий тип выделения не совпадает с типом первой области, тип выделения устанавливается как "Смешанный".
  • Next Area: Завершение цикла по областям.
  • For Each Area In ДиапазонСоединений.Areas: Запускается цикл по всем областям в объединенном диапазоне.
  • Select Case ТипОбласти(Area): Начало выбора в зависимости от типа текущей области.
  • В блоках Case: Для каждого типа области (Строка, Столбец, Рабочий лист, Блок) выполняются соответствующие действия, такие как подсчет количества строк, столбцов и блоков.
  • Next Area: Завершение цикла по объединенным областям.
  • КоличествоЯчеек = ДиапазонСоединений.CountLarge: Подсчет общего количества ячеек в объединенном диапазоне.
Для ясности: процедура ОписаниеОбластей и функция ТипОбласти, находятся в одном модуле.

Теперь можно и посмотреть результаты. Например:

Скриншот с моего ноутбука
Скриншот с моего ноутбука