Подсчет количества строк, включая пустые строки, до 2 встреченных пробелов - PullRequest
0 голосов
/ 22 января 2019

В настоящее время есть макрос, который подсчитывает количество строк для использования в качестве переменной. Из-за нового источника данных, который имеет пустые строки, это больше не работает.

Мне нужно, чтобы он продолжал считать, пока не достигнет двух пробелов, которые являются концом источника данных, но также включают пустые строки в счет.

У меня есть макрос, который подсчитывает количество строк, чтобы предоставить переменную для отдельного макроса, который использует это число для функции цикла. Все работало нормально, за исключением того, что новые данные для подсчета имеют пустую строку между данными (которые должны остаться и быть включены в общее количество строк).

Я могу понять, как подсчитать непустые и полные ячейки отдельно, но не могу понять, как это сделать вместе. Есть предложения?

Sub num_rows(nrows As Variant)
    Dim numrows
    Dim ra As Range
    Dim i As Integer

    'get number of rows between blank cells
    Sheets("4 Gantt Overview").Activate
    Set ra = Range("b7")

    numrows = Range(ra.Address,Range(ra.Address).End(xlDown)).rows.Count
    Range(ra.Address).Select

    'establish counting loop
    For i = 1 To numrows      
        ActiveCell.Offset(1, 0).Select          
    Next

    nrows = numrows        
    Range("b7").Select 
End Sub

Для набора данных из 130 строк и 2 пробелов его отсчет составляет только 30 строк (первая пустая позиция).

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Вы также можете попробовать что-то подобное, если хотите:

Sub lastrow()
    Dim lr As Long
    lr = ActiveSheet.Rows.Count
    Cells(1, lr).Select
    Selection.End(xlUp).Select
    lr = ActiveCell.Row
End Sub

(спуститесь до самого низа и прыгните на последнюю непустую строку в Клумне (это можно изменить), также выможно добавить что-то вроде +1, если вы хотите пустую строку в конце)

0 голосов
/ 22 января 2019

Представьте себе следующие данные:

enter image description here

Если вы хотите найти первые 2 пробела, вы можете использовать .SpecialCells(xlCellTypeBlanks), чтобы пополнить все пробелы в вашем диапазоне (здесь столбец A). Это превратит что-то вроде выделенных ячеек в изображение. Есть 6 выбранных областей, к которым вы можете получить доступ .SpecialCells(xlCellTypeBlanks).Areas.

Так что, если мы пройдем по всем этим областям For Each Area In .Areas и проверим их количество строк If Area.Rows.Count >= 2, мы можем легко найти область с 2 строками (или хотя бы 2 рядами).

Количество строк (пустых или нет) равно Area.Row - AnalyzeRange.Row

Итак, мы получаем:

Option Explicit

Sub TestCount()
    MsgBox CountRowsUntilTwoBlanks(Worksheets("Sheet1").Range("A:A"))
End Sub


Function CountRowsUntilTwoBlanks(AnalyzeRange As Range) As Long
    Dim Area As Range
    For Each Area In AnalyzeRange.SpecialCells(xlCellTypeBlanks).Areas
        If Area.Rows.Count >= 2 Then 'if 2 or more then use >=2, if exactly 2 use =2
            CountRowsUntilTwoBlanks = Area.Row - AnalyzeRange.Row
            Exit For
        End If
    Next Area
End Function

Так что для этого примера он вернет 16 строк.


Обратите внимание, что если ваша цель - найти последнюю использованную строку, которая в этом примере будет строкой 20, тогда вы можете просто использовать ...

Dim LastRow As Long
With Worksheets("Sheet1")
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With

… чтобы найти последнюю использованную строку в столбце A. Здесь LastRow возвращает 20.

0 голосов
/ 22 января 2019

это этот макрос. Он найдет первую пустую ячейку с следующей пустой ячейкой.

Sub stopAtDoubleBlank()

        Dim i As Long

        i = 2
        Do While Range("A" & i).Value <> "" Or Range("A" & i + 1) <> ""

            i = i + 1
        Loop

        MsgBox i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...