Навігація по робочих аркушах
Свайпніть щоб показати меню
Реальні дані не мають позначки, яка вказує, де вони закінчуються. Жорстке зазначення Range("A1:I5") перестає працювати в той момент, коли додається шосте замовлення — тому потрібно запитати у аркуша, де закінчуються його дані.
Визначення останнього рядка
Найбільш часто використовуваний рядок коду в цьому курсі:
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Читати справа наліво: почати з самого низу стовпця A (ws.Rows.Count), піднятися вгору (End(xlUp)) до першої заповненої клітинки та повернути її номер рядка. Працює незалежно від кількості замовлень.
Визначення останнього стовпця
Працює так само, але вбік:
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
Завдання
- Напишіть
Sub, який знаходить останній рядок за допомогою методуEnd(xlUp)і виводить його у Вікно негайного виконання. - У тому ж
Subзнайдіть останній рядок іншим способом, використовуючиCurrentRegion.Rows.Count, і також виведіть його — переконайтеся, що результати збігаються. - Додайте вручну шосте замовлення у рядок 7 аркуша, повторно запустіть макрос і переконайтеся, що обидва методи тепер показують 7 без змін у коді:
1. Пошук останнього рядка за допомогою End(xlUp)
- Початок з самого низу стовпця A і стрибок вгору — саме та схема, що описана в розділі 3 "Пошук останнього рядка".
- Виведення результату через
Debug.Printдля перегляду у вікні Immediate (Ctrl+G).
2. Альтернативний спосіб із CurrentRegion
CurrentRegionрозширюється від однієї стартової клітинки (спробуйтеRange("A1")) до всього суміжного блоку..Rows.Countдля цієї області включає рядок заголовків — зверніть увагу на примітку розділу щодо віднімання 1, якщо потрібні лише рядки з даними. Оскільки тут потрібно лише порівняти два методи, спочатку виведіть необроблену кількість і потім проаналізуйте заголовок.
3. Додавання шостого рядка та повторний запуск
- Зміни в коді не потрібні — просто введіть нове замовлення безпосередньо в рядок 7 на аркуші, а потім знову запустіть той самий
Sub.
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
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Навігація по робочих аркушах
Реальні дані не мають позначки, яка вказує, де вони закінчуються. Жорстке зазначення Range("A1:I5") перестає працювати в той момент, коли додається шосте замовлення — тому потрібно запитати у аркуша, де закінчуються його дані.
Визначення останнього рядка
Найбільш часто використовуваний рядок коду в цьому курсі:
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Читати справа наліво: почати з самого низу стовпця A (ws.Rows.Count), піднятися вгору (End(xlUp)) до першої заповненої клітинки та повернути її номер рядка. Працює незалежно від кількості замовлень.
Визначення останнього стовпця
Працює так само, але вбік:
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
Завдання
- Напишіть
Sub, який знаходить останній рядок за допомогою методуEnd(xlUp)і виводить його у Вікно негайного виконання. - У тому ж
Subзнайдіть останній рядок іншим способом, використовуючиCurrentRegion.Rows.Count, і також виведіть його — переконайтеся, що результати збігаються. - Додайте вручну шосте замовлення у рядок 7 аркуша, повторно запустіть макрос і переконайтеся, що обидва методи тепер показують 7 без змін у коді:
1. Пошук останнього рядка за допомогою End(xlUp)
- Початок з самого низу стовпця A і стрибок вгору — саме та схема, що описана в розділі 3 "Пошук останнього рядка".
- Виведення результату через
Debug.Printдля перегляду у вікні Immediate (Ctrl+G).
2. Альтернативний спосіб із CurrentRegion
CurrentRegionрозширюється від однієї стартової клітинки (спробуйтеRange("A1")) до всього суміжного блоку..Rows.Countдля цієї області включає рядок заголовків — зверніть увагу на примітку розділу щодо віднімання 1, якщо потрібні лише рядки з даними. Оскільки тут потрібно лише порівняти два методи, спочатку виведіть необроблену кількість і потім проаналізуйте заголовок.
3. Додавання шостого рядка та повторний запуск
- Зміни в коді не потрібні — просто введіть нове замовлення безпосередньо в рядок 7 на аркуші, а потім знову запустіть той самий
Sub.
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
Дякуємо за ваш відгук!