Подсчитать строки между непустыми ячейками

Привет, у меня есть аналогичный вопрос к вопросу, поставленному на

Перемещение из одной ячейки в другую и подсчет количества строк между двумя данными

В моем примере я хотел бы подсчитать количество строк между непустыми ячейками (включая исходную строку данных) в столбце A и поместить счет в столбце B

Мои данные начинаются с 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, источник
Hi Jon49 работает отлично до последней строки
добавлено автор paul worthington, источник
Привет Jon49, он отлично работает до последней строки, содержащей данные. например, строка A297 46, строка A298 пустая или пустая, но ее реальная последняя строка - поэтому столбец B должен показывать B297 2 не 65239
добавлено автор paul worthington, источник
Привет Jon49 Omg ваша легенда код работает настоящее удовольствие. Большое спасибо за вашу помощь. Это первый вопрос, который я еще не спросил по протоколу, но я хочу задать следующий вопрос по этому макросу.
добавлено автор paul worthington, источник
Привет Jon49 - У меня есть лист с навигационными кнопками, который перемещает записи со стрелками. Каждая запись имеет переменные строки. Мне нужен другой макрос, который перемещает записи. например, Recordset 1 имеет 3 строки и является первой записью, когда вы нажимаете стрелку вниз, а затем следующий набор записей для отображения - Recordset2, который имеет 4 строки. Если вы можете дать какие-либо советы, я буду вечно благодарен. У меня есть форма, которая делает это, но я перешел на использование activesheet, после чего началась забава. Попытка ссылаться на лист 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
добавлено