Есть ли способ зациклить строки, которые удовлетворяют условию, чтобы установить один диапазон - PullRequest
0 голосов
/ 08 октября 2019

Я хочу, чтобы VBA просматривал строки в листе и устанавливал диапазон на основе строк, которые удовлетворяют условию.

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

Sub setrng()
    Set WkSht = Sheets("Main")
    For i = 1 To 335
        If WkSht.Cells(i, 8).Value = "Y" And WkSht.Cells(i, 9).Value = "ZC" And WkSht.Cells(i, 10).Value = "N" Then

            Dim rng As Range
            With Application.Intersect(WkSht.Rows(i), WkSht.UsedRange)
                Set rng(i) = WkSht.Range(WkSht.Cells(i, 3), .Cells(.Cells.Count))
            End With

            If rng Is Nothing Then
                Exit Sub
            End If
        End If
    Next

1 Ответ

0 голосов
/ 08 октября 2019

Построение диапазона из диапазонов лучше всего делать с помощью Union. Небольшая проблема заключается в том, что вы не можете объединить что-то ни с чем. В этом случае (это первая итерация), вам нужно будет установить собранный диапазон на первый найденный диапазон. После этого используйте union

Sub setrng()
    Dim CollectedRange As Range
    Dim AddedRange As Range

    Set WkSht = Sheets("Main")

    For i = 1 To 335
        If WkSht.Cells(i, 8).Value = "Y" And WkSht.Cells(i, 9).Value = "ZC" And WkSht.Cells(i, 10).Value = "N" Then


            With Application.Intersect(WkSht.Rows(i), WkSht.UsedRange)
                Set AddedRange = WkSht.Range(WkSht.Cells(i, 3), .Cells(.Cells.Count))
            End With

            If Not AddedRange Is Nothing Then
                If CollectedRange Is Nothing Then
                    Set CollectedRange = AddedRange
                Else
                    Set CollectedRange = Union(CollectedRange, AddedRange)
                End If
            End If
        End If

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