Свойства Row и Rows объекта Range в VBA Excel. Возвращение номера первой строки и обращение к строкам смежных и несмежных диапазонов.
Свойство Range.Row
Свойство Row объекта Range предназначено только для чтения, тип данных — Long.
Если диапазон состоит из нескольких областей (несмежный диапазон), свойство Range.Row возвращает номер первой строки в первой области указанного диапазона:
1 2 3 4 5 |
Range("B3:F10").Select MsgBox Selection.Row 'Результат: 3 Range("E8:F9,D4:G13,B2:F10").Select MsgBox Selection.Row 'Результат: 8 |
Для возвращения номеров первых строк отдельных областей несмежного диапазона используется свойство Areas объекта Range:
1 2 3 4 |
Range("E8:F9,D4:G13,B2:F10").Select MsgBox Selection.Areas(1).Row 'Результат: 8 MsgBox Selection.Areas(2).Row 'Результат: 4 MsgBox Selection.Areas(3).Row 'Результат: 2 |
Свойство Range.Rows
Чтобы возвратить одну строку заданного диапазона, необходимо указать ее порядковый номер (индекс) в скобках:
1 2 3 4 |
Dim myRange As Range Set myRange = Range("B4:D6").Rows(1) 'Возвращается диапазон: $B$4:$D$4 Set myRange = Range("B4:D6").Rows(2) 'Возвращается диапазон: $B$5:$D$5 Set myRange = Range("B4:D6").Rows(3) 'Возвращается диапазон: $B$6:$D$6 |
Самое удивительное заключается в том, что выход индекса строки за пределы указанного диапазона не приводит к ошибке, а возвращается диапазон, расположенный за пределами исходного диапазона (отсчет начинается с первой строки заданного диапазона):
1 |
MsgBox Range("B4:D6").Rows(12).Address 'Результат: $B$15:$D$15 |
Если указанный объект Range является несмежным, состоящим из нескольких смежных диапазонов (областей), свойство Rows возвращает коллекцию строк первой области заданного диапазона. Для обращения к строкам других областей указанного диапазона используется свойство Areas объекта Range:
1 2 3 4 |
Range("E8:F9,D4:G13,B2:F10").Select MsgBox Selection.Areas(1).Rows(2).Address 'Результат: $E$9:$F$9 MsgBox Selection.Areas(2).Rows(2).Address 'Результат: $D$5:$G$5 MsgBox Selection.Areas(3).Rows(2).Address 'Результат: $B$3:$F$3 |
Определение количества строк в диапазоне:
1 2 3 |
Dim r As Long r = Range("D4:K11").Rows.Count MsgBox r 'Результат: 8 |