Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Навігація по робочих аркушах | Робота з Даними в Excel
Excel VBA для автоматизації бізнесу

Навігація по робочих аркушах

Свайпніть щоб показати меню

Реальні дані не мають позначки, яка вказує, де вони закінчуються. Жорстке зазначення Range("A1:I5") перестає працювати в той момент, коли додається шосте замовлення — тому потрібно запитати у аркуша, де закінчуються його дані.

Визначення останнього рядка

Найбільш часто використовуваний рядок коду в цьому курсі:

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Читати справа наліво: почати з самого низу стовпця A (ws.Rows.Count), піднятися вгору (End(xlUp)) до першої заповненої клітинки та повернути її номер рядка. Працює незалежно від кількості замовлень.

Рисунок 3.2

Визначення останнього стовпця

Працює так само, але вбік:

Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

UsedRange

Звітує про повний прямокутний діапазон аркуша, який коли-небудь містив дані — зручно для швидкої перевірки, але використовуйте обережно: він пам’ятає клітинки, у яких раніше були дані, навіть після їх видалення, тому може завищувати фактичний діапазон даних.

Debug.Print ws.UsedRange.Address        ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count     ' 6

CurrentRegion

Зазвичай кращий інструмент: розширюється від однієї клітинки до суміжного блоку даних навколо неї, зупиняючись на першому порожньому рядку або стовпці — ідеально підходить для чистої таблиці, як Orders:

Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address           ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1    ' 5 — subtract 1 to exclude the header

Завдання

  1. Напишіть Sub, який знаходить останній рядок за допомогою методу End(xlUp) і виводить його у Вікно негайного виконання.
  2. У тому ж Sub знайдіть останній рядок іншим способом, використовуючи CurrentRegion.Rows.Count, і також виведіть його — переконайтеся, що результати збігаються.
  3. Додайте вручну шосте замовлення у рядок 7 аркуша, повторно запустіть макрос і переконайтеся, що обидва методи тепер показують 7 без змін у коді:
Підказка
expand arrow

1. Пошук останнього рядка за допомогою End(xlUp)

  • Початок з самого низу стовпця A і стрибок вгору — саме та схема, що описана в розділі 3 "Пошук останнього рядка".
  • Виведення результату через Debug.Print для перегляду у вікні Immediate (Ctrl+G).

2. Альтернативний спосіб із CurrentRegion

  • CurrentRegion розширюється від однієї стартової клітинки (спробуйте Range("A1")) до всього суміжного блоку.
  • .Rows.Count для цієї області включає рядок заголовків — зверніть увагу на примітку розділу щодо віднімання 1, якщо потрібні лише рядки з даними. Оскільки тут потрібно лише порівняти два методи, спочатку виведіть необроблену кількість і потім проаналізуйте заголовок.

3. Додавання шостого рядка та повторний запуск

  • Зміни в коді не потрібні — просто введіть нове замовлення безпосередньо в рядок 7 на аркуші, а потім знову запустіть той самий Sub.
Розв'язок
expand arrow
Sub CompareLastRowMethods()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    Dim lastRowMethod1 As Long
    lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print "End(xlUp): " & lastRowMethod1

    Dim lastRowMethod2 As Long
    lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
    Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Навігація по робочих аркушах

Реальні дані не мають позначки, яка вказує, де вони закінчуються. Жорстке зазначення Range("A1:I5") перестає працювати в той момент, коли додається шосте замовлення — тому потрібно запитати у аркуша, де закінчуються його дані.

Визначення останнього рядка

Найбільш часто використовуваний рядок коду в цьому курсі:

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Читати справа наліво: почати з самого низу стовпця A (ws.Rows.Count), піднятися вгору (End(xlUp)) до першої заповненої клітинки та повернути її номер рядка. Працює незалежно від кількості замовлень.

Рисунок 3.2

Визначення останнього стовпця

Працює так само, але вбік:

Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

UsedRange

Звітує про повний прямокутний діапазон аркуша, який коли-небудь містив дані — зручно для швидкої перевірки, але використовуйте обережно: він пам’ятає клітинки, у яких раніше були дані, навіть після їх видалення, тому може завищувати фактичний діапазон даних.

Debug.Print ws.UsedRange.Address        ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count     ' 6

CurrentRegion

Зазвичай кращий інструмент: розширюється від однієї клітинки до суміжного блоку даних навколо неї, зупиняючись на першому порожньому рядку або стовпці — ідеально підходить для чистої таблиці, як Orders:

Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address           ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1    ' 5 — subtract 1 to exclude the header

Завдання

  1. Напишіть Sub, який знаходить останній рядок за допомогою методу End(xlUp) і виводить його у Вікно негайного виконання.
  2. У тому ж Sub знайдіть останній рядок іншим способом, використовуючи CurrentRegion.Rows.Count, і також виведіть його — переконайтеся, що результати збігаються.
  3. Додайте вручну шосте замовлення у рядок 7 аркуша, повторно запустіть макрос і переконайтеся, що обидва методи тепер показують 7 без змін у коді:
Підказка
expand arrow

1. Пошук останнього рядка за допомогою End(xlUp)

  • Початок з самого низу стовпця A і стрибок вгору — саме та схема, що описана в розділі 3 "Пошук останнього рядка".
  • Виведення результату через Debug.Print для перегляду у вікні Immediate (Ctrl+G).

2. Альтернативний спосіб із CurrentRegion

  • CurrentRegion розширюється від однієї стартової клітинки (спробуйте Range("A1")) до всього суміжного блоку.
  • .Rows.Count для цієї області включає рядок заголовків — зверніть увагу на примітку розділу щодо віднімання 1, якщо потрібні лише рядки з даними. Оскільки тут потрібно лише порівняти два методи, спочатку виведіть необроблену кількість і потім проаналізуйте заголовок.

3. Додавання шостого рядка та повторний запуск

  • Зміни в коді не потрібні — просто введіть нове замовлення безпосередньо в рядок 7 на аркуші, а потім знову запустіть той самий Sub.
Розв'язок
expand arrow
Sub CompareLastRowMethods()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    Dim lastRowMethod1 As Long
    lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print "End(xlUp): " & lastRowMethod1

    Dim lastRowMethod2 As Long
    lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
    Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 2
some-alt