Кількість рядків між непустами клітинами

Привіт, у мене є подібне питання до поставленого питання

Переміщення з однієї комірки в іншу та підрахунок кількості рядків між двома даними

У моєму прикладі я хотів би підрахувати кількість рядків між непустами клітинками (включаючи оригінальну лінію даних) у колонці А і поставити рахунок у колонку В

Мої дані починаються з A1 і рухаються вниз з заголовками в комірки до наступного ряду даних.

Приклад:

A1 1        B1 3
A2          B2 4
A3          B3 2
A4 2        B4 3
A5  
A6  
A7 
A8 3  
A9  
A10 4
A11 
A12 

Я намагався зробити моди до оригінального рішення розміщені, але я не можу здаватися, щоб отримати рахунок для останнього рядка.

Будь-яка допомога буде дуже вдячна.

1
Павло, не соромтеся відмітити мою відповідь як правильну відповідь.
додано Автор Jon49, джерело

2 Відповіді

Не впевнений, що я достатньо отримую те, що прошу вас, але спробуйте щось на зразок цього:

    Private Sub CountSkips()

    Dim lStart As Long, lEnd As Long
    Dim rData As Range, rNext As Range
    Dim vData As Variant

    Set rData = ActiveSheet.Range("A1" _
                , ActiveSheet.Cells(Application.Rows.Count, 1).End(xlUp))
    vData = rData.Resize(rData.Rows.Count + 1).Value2

    Set rNext = rData.Resize(1)
    Do While rNext.Row <> Application.Rows.Count
        lStart = rNext.Row
        Set rNext = rNext.End(xlDown)
        If LenB(vData(lStart + 1, 1)) = 0 Then
            lEnd = rNext.Row
            rNext.Offset(lStart - lEnd, 1) = lEnd - lStart
        End If
    Loop

End Sub

Оновлення:

Інший спосіб зробити це, з вашого коментаря це звучало так, як ви хочете, щоб число за елементом після порожнього.

Private Sub CountSkips()

    Dim lStart As Long, lEnd As Long, lVeryLastRow As Long
    Dim rData As Range, rNext As Range
    Dim vData As Variant

    lVeryLastRow = Application.Rows.Count
    Set rData = ActiveSheet.Range("A1" _
                , ActiveSheet.Cells(lVeryLastRow, 1).End(xlUp))
    vData = rData.Resize(rData.Rows.Count + 1).Value2

    Set rNext = rData.Resize(1)
    Do While rNext.Row <> Application.Rows.Count
        lStart = rNext.Row
        Set rNext = rNext.End(xlDown)
        If LenB(vData(lStart + 1, 1)) = 0 And rNext.Row <> lVeryLastRow Then
            lEnd = rNext.Row
            rNext.Offset(, 1) = lEnd - lStart
        End If
    Loop

End Sub
1
додано
Будь ласка, відзначте свої питання як вирішені, якщо у вас є відповідна відповідь. Ви повинні почати нову гілку для нового запитання.
додано Автор Reafidy, джерело
Я помістив трохи змінений код на них для вас, повинен робити те, що хочеш.
додано Автор Jon49, джерело
Павло, так, це новий матеріал питання, я зараз у відпустці прямо зараз, тому не можу допомогти, але, якщо хочете, відмітити мою відповідь як правильну, це буде вдячне.
додано Автор Jon49, джерело
Привіт Jon49 він ідеально підходить до останнього ряду
додано Автор paul worthington, джерело
Привіт Jon49 він ідеально підходить до останнього ряду, що містить дані. наприклад, рядок A297 46, рядок A298 порожній або порожній, але це справжній останній рядок - тому колонка В повинна показувати B297 2 не 65239
додано Автор paul worthington, джерело
Привіт Jon49 Omg Ваша легенда, кодекс працює справжньою обробкою. Дуже дякую за вашу допомогу. Це перше питання, про яке я попросив, але не знаю про протокол, але я хочу поставити запитання про подальший пошук на цьому макросі.
додано Автор paul worthington, джерело
Привіт Jon49 - У мене є лист з кнопками навігації, що переміщує записи за допомогою клавіш зі стрілками. Кожен запис має змінні рядки. Мені потрібен інший макрос, який керує наборами записів. наприклад Recordset 1 має 3 рядки, і це перша запис, коли ви натискаєте стрілку вниз, а потім наступний рядок Recordset, який відображатиметься Recordset2, який має 4 рядки. Якщо ви можете надати будь-які поради, я буду вічно вдячний. У мене є форма, яка робить це, але я змінив, використовуючи активний аркуш, потім весело розпочалося. Спробуйте вказати аркуш 3 з елементами навігації, а аркуш 1 містить усі дані. Підбадьорює
додано Автор paul worthington, джерело
Привіт Jon49, я позначив вашу відповідь правильною, дякую за допомогу
додано Автор paul worthington, джерело

wsworkcenter--> workbook object name

WsWorkCenter.Activate
'counting non empty rows , will store count  in the variable mlProjectCount
Cells(2, 1).Select
Selection.End(xlDown).Select    
mlProjectCount = ActiveCell.Row
0
додано