Робота з діапазонами
Свайпніть щоб показати меню
Виділення діапазонів
Це використовується під час дослідження, у робочому коді уникають .Select, віддаючи перевагу безпосередньому посиланню на діапазони:
ws.Range("A1:I1").Select ' fine for exploring
ws.Range("A1:I1").Font.Bold = True ' better — skips Select entirely
Offset
Зміщує посилання відносно самого себе — читається як (рядків вниз, стовпців вправо), від’ємні числа зміщують вгору або вліво:
Dim orderCell As Range
Set orderCell = ws.Range("A2") ' ORD1001
Debug.Print orderCell.Offset(1, 0).Value ' one row down → ORD1002
Debug.Print orderCell.Offset(0, 2).Value ' two columns right → Acme Corp
Debug.Print orderCell.Offset(-1, 0).Value ' one row up → the header, "Order ID"
Зміна розміру
Змінює кількість рядків або стовпців, які охоплює діапазон, залишаючи незмінним його верхній лівий кут:
Dim headerRow As Range
Set headerRow = ws.Range("A1")
Set headerRow = headerRow.Resize(1, 9) ' now covers A1:I1, the full header
Комбінуючи Offset і Resize, можна отримати "все під заголовком", не знаючи кількість рядків заздалегідь:
Dim dataRange As Range
Set dataRange = ws.Range("A1").CurrentRegion
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
' dataRange now covers A2:I6 — every order, no header
Іменовані діапазони
Надайте діапазону просту англійську назву, яку можна використовувати замість адреси:
ThisWorkbook.Names.Add Name:="OrdersTable", RefersTo:=ws.Range("A1:I6")
Debug.Print ws.Range("OrdersTable").Rows.Count
Завдання
- Починаючи з Range("A2") (ORD1001), використайте
Offset, щоб вивести Product і Total для замовлення на два рядки нижче (ORD1003) — не вводячи "A4", "D4" чи "H4". - Використайте разом
CurrentRegion,OffsetіResize, щоб вибрати лише рядки з даними (без заголовка) і вивести кількість рядків у цьому діапазоні. - Створіть іменований діапазон з назвою
OrdersData, який охоплює той самий діапазон лише з даними, і переконайтеся, що ви можете звертатися до нього за назвою у Вікні негайного виконання.
1. Використання Offset від A2 для досягнення ORD1003
- Почніть із встановлення змінної
RangeнаA2— це ваша опорна клітинка, як у прикладі з розділу. - "Два рядки нижче" та "той самий стовпець" означає, що перший аргумент
Offset(рядки) — 2, а другий (стовпці) — 0, для стовпця Product. - Total знаходиться в іншому стовпці, але в тому ж рядку — тому змінюється лише номер зсуву по стовпцю між двома викликами
Offset, а не по рядку. - Рахуйте стовпці від позиції A2: Product знаходиться на 3 стовпці праворуч від Order ID; Total — на 7 стовпців праворуч.
2. Комбінування CurrentRegion, Offset та Resize
CurrentRegionдляA1повертає всю таблицю разом із заголовком.Offset(1, 0)зсуває весь блок на один рядок вниз — цього достатньо, щоб прибрати заголовок.Resizeповинен зменшити кількість рядків на ту ж кількість, на яку ви зсунули, інакше нижній край вийде за межі реальних даних.
3. Створення та перевірка іменованого діапазону
- Іменовані діапазони додаються через
ThisWorkbook.Names.Add, вказуючиName:=таRefersTo:=— ви можете повторно використати той самий вираз діапазону з підказки 2, не створюючи його заново. - Щоб звернутися до нього пізніше, використовуйте
Range("OrdersData")— ім'я стає простим рядком, а не змінною.
Sub NavigateWithoutHardcoding()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
' --- 1. Offset from A2 to reach ORD1003 ---
Dim orderCell As Range
Set orderCell = ws.Range("A2")
Debug.Print orderCell.Offset(2, 3).Value ' Product
Debug.Print orderCell.Offset(2, 7).Value ' Total
' --- 2. CurrentRegion + Offset + Resize ---
Dim dataRange As Range
Set dataRange = ws.Range("A1").CurrentRegion
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
Debug.Print "Data rows: " & dataRange.Rows.Count
' --- 3. Named range ---
ThisWorkbook.Names.Add Name:="OrdersData", RefersTo:=dataRange
End Sub
Запустіть Sub (F5), потім у вікні Immediate (Ctrl+G) введіть:
?Range("OrdersData").Rows.Count
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Робота з діапазонами
Виділення діапазонів
Це використовується під час дослідження, у робочому коді уникають .Select, віддаючи перевагу безпосередньому посиланню на діапазони:
ws.Range("A1:I1").Select ' fine for exploring
ws.Range("A1:I1").Font.Bold = True ' better — skips Select entirely
Offset
Зміщує посилання відносно самого себе — читається як (рядків вниз, стовпців вправо), від’ємні числа зміщують вгору або вліво:
Dim orderCell As Range
Set orderCell = ws.Range("A2") ' ORD1001
Debug.Print orderCell.Offset(1, 0).Value ' one row down → ORD1002
Debug.Print orderCell.Offset(0, 2).Value ' two columns right → Acme Corp
Debug.Print orderCell.Offset(-1, 0).Value ' one row up → the header, "Order ID"
Зміна розміру
Змінює кількість рядків або стовпців, які охоплює діапазон, залишаючи незмінним його верхній лівий кут:
Dim headerRow As Range
Set headerRow = ws.Range("A1")
Set headerRow = headerRow.Resize(1, 9) ' now covers A1:I1, the full header
Комбінуючи Offset і Resize, можна отримати "все під заголовком", не знаючи кількість рядків заздалегідь:
Dim dataRange As Range
Set dataRange = ws.Range("A1").CurrentRegion
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
' dataRange now covers A2:I6 — every order, no header
Іменовані діапазони
Надайте діапазону просту англійську назву, яку можна використовувати замість адреси:
ThisWorkbook.Names.Add Name:="OrdersTable", RefersTo:=ws.Range("A1:I6")
Debug.Print ws.Range("OrdersTable").Rows.Count
Завдання
- Починаючи з Range("A2") (ORD1001), використайте
Offset, щоб вивести Product і Total для замовлення на два рядки нижче (ORD1003) — не вводячи "A4", "D4" чи "H4". - Використайте разом
CurrentRegion,OffsetіResize, щоб вибрати лише рядки з даними (без заголовка) і вивести кількість рядків у цьому діапазоні. - Створіть іменований діапазон з назвою
OrdersData, який охоплює той самий діапазон лише з даними, і переконайтеся, що ви можете звертатися до нього за назвою у Вікні негайного виконання.
1. Використання Offset від A2 для досягнення ORD1003
- Почніть із встановлення змінної
RangeнаA2— це ваша опорна клітинка, як у прикладі з розділу. - "Два рядки нижче" та "той самий стовпець" означає, що перший аргумент
Offset(рядки) — 2, а другий (стовпці) — 0, для стовпця Product. - Total знаходиться в іншому стовпці, але в тому ж рядку — тому змінюється лише номер зсуву по стовпцю між двома викликами
Offset, а не по рядку. - Рахуйте стовпці від позиції A2: Product знаходиться на 3 стовпці праворуч від Order ID; Total — на 7 стовпців праворуч.
2. Комбінування CurrentRegion, Offset та Resize
CurrentRegionдляA1повертає всю таблицю разом із заголовком.Offset(1, 0)зсуває весь блок на один рядок вниз — цього достатньо, щоб прибрати заголовок.Resizeповинен зменшити кількість рядків на ту ж кількість, на яку ви зсунули, інакше нижній край вийде за межі реальних даних.
3. Створення та перевірка іменованого діапазону
- Іменовані діапазони додаються через
ThisWorkbook.Names.Add, вказуючиName:=таRefersTo:=— ви можете повторно використати той самий вираз діапазону з підказки 2, не створюючи його заново. - Щоб звернутися до нього пізніше, використовуйте
Range("OrdersData")— ім'я стає простим рядком, а не змінною.
Sub NavigateWithoutHardcoding()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
' --- 1. Offset from A2 to reach ORD1003 ---
Dim orderCell As Range
Set orderCell = ws.Range("A2")
Debug.Print orderCell.Offset(2, 3).Value ' Product
Debug.Print orderCell.Offset(2, 7).Value ' Total
' --- 2. CurrentRegion + Offset + Resize ---
Dim dataRange As Range
Set dataRange = ws.Range("A1").CurrentRegion
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
Debug.Print "Data rows: " & dataRange.Rows.Count
' --- 3. Named range ---
ThisWorkbook.Names.Add Name:="OrdersData", RefersTo:=dataRange
End Sub
Запустіть Sub (F5), потім у вікні Immediate (Ctrl+G) введіть:
?Range("OrdersData").Rows.Count
Дякуємо за ваш відгук!