Свойства Column и Columns объекта Range в VBA Excel. Возвращение номера первого столбца и обращение к столбцам смежных и несмежных диапазонов.
Свойство Range.Column
Свойство Column объекта Range предназначено только для чтения, тип данных — Long.
Если диапазон состоит из нескольких областей (несмежный диапазон), свойство Range.Column возвращает номер первого столбца в первой области указанного диапазона:
1 2 3 4 5 |
Range("B2:F10").Select MsgBox Selection.Column 'Результат: 2 Range("E1:F8,D4:G13,B2:F10").Select MsgBox Selection.Column 'Результат: 5 |
Для возвращения номеров первых столбцов отдельных областей несмежного диапазона используется свойство Areas объекта Range:
1 2 3 4 |
Range("E1:F8,D4:G13,B2:F10").Select MsgBox Selection.Areas(1).Column 'Результат: 5 MsgBox Selection.Areas(2).Column 'Результат: 4 MsgBox Selection.Areas(3).Column 'Результат: 2 |
Свойство Range.Columns
Чтобы возвратить один столбец заданного диапазона, необходимо указать его порядковый номер (индекс) в скобках:
1 2 3 |
Set myRange = Range("B4:D6").Columns(1) 'Возвращается диапазон: $B$4:$B$6 Set myRange = Range("B4:D6").Columns(2) 'Возвращается диапазон: $C$4:$C$6 Set myRange = Range("B4:D6").Columns(3) 'Возвращается диапазон: $D$4:$D$6 |
Самое удивительное заключается в том, что выход индекса столбца за пределы указанного диапазона не приводит к ошибке, а возвращается диапазон, расположенный за пределами исходного диапазона (отсчет начинается с первого столбца заданного диапазона):
1 |
MsgBox Range("B4:D6").Columns(7).Address 'Результат: $H$4:$H$6 |
Если указанный объект Range является несмежным, состоящим из нескольких смежных диапазонов (областей), свойство Columns возвращает коллекцию столбцов первой области заданного диапазона. Для обращения к столбцам других областей указанного диапазона используется свойство Areas объекта Range:
1 2 3 4 |
Range("E1:F8,D4:G13,B2:F10").Select MsgBox Selection.Areas(1).Columns(2).Address 'Результат: $F$1:$F$8 MsgBox Selection.Areas(2).Columns(2).Address 'Результат: $E$4:$E$13 MsgBox Selection.Areas(3).Columns(2).Address 'Результат: $C$2:$C$10 |
Определение количества столбцов в диапазоне:
1 2 3 |
Dim c As Long c = Range("D5:J11").Columns.Count MsgBox c 'Результат: 7 |
Буква вместо номера
Если в качестве индекса столбца используется буква, она соответствует порядковому номеру этой буквы на рабочем листе:
"A" = 1;
"B" = 2;
"C" = 3;
и так далее.
Пример использования буквенного индекса вместо номера столбца в качестве аргумента свойства Columns объекта Range:
1 2 3 |
Range("G2:K10").Select MsgBox Selection.Columns(2).Address 'Результат: $H$2:$H$10 MsgBox Selection.Columns("B").Address 'Результат: $H$2:$H$10 |
Обратите внимание, что свойство Range("G2:K10").Columns("B")
возвращает диапазон $H$2:$H$10
, а не $B$2:$B$10
.