Выбор диапазона на основе заданного c текста, затем заполнение текстом - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь написать код, в котором я хочу посмотреть, выберите диапазон от начала до конца в столбце A, затем заполните выбранный диапазон в столбце B цифрой «1». Но мой код только заполняет нижние части и пропускает верхние части. Обратитесь к этой фотографии. Как мне убедиться, что он go проходит через каждую строку, и когда он встречает Start, он ищет ближайший конец и заполняет столбец B?

Table

Sub Select()
 Dim LastRowA As Long, i As Long
 Dim findrow As Long, findrow2 As Long

    With ThisWorkbook.Worksheets("Sheet1")
        LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 1 To LastRowA
            findrow = Range("A:A").Find("Start", Range("A1")).Row
            findrow2 = Range("A:A").Find("End", Range("A" & findrow)).Row
            Range("A" & findrow & ":A" & findrow2).Offset(0, 1).Value = "1"
        Next i
    End With
End Sub

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Это найдет начало, l oop до конца, пока не найдет конец. Проверено и работает в соответствии с просьбой.

Sub Select()
 Dim LastRowA, i As Long

    With ThisWorkbook.Worksheets("Sheet1")
        LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 1 To LastRowA
            If .Cells(i, 1) = "Start" Then
                Do Until .Cells(i, 1) = "End"
                    .Cells(i, 2).Value = 1
                    i = i + 1
                Loop
                .Cells(i, 2).Value = 1
            End If
        Next i
    End With
End Sub
1 голос
/ 24 февраля 2020

Find - опасный зверь для использования в VBA. Было бы намного проще просто пропустить через ячейки l oop, отслеживая, находитесь ли вы между началом и концом:

Sub Select()
    Dim LastRowA As Long, i As Long, b As Boolean

    With ThisWorkbook.Worksheets("Sheet1")
        LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 1 To LastRowA
            If .Cells(i, 1).Value = "Start" Then
                b = True
                .Cells(i, 2).Value = 1
            ElseIf .Cells(i, 1).Value = "End" Then
                b = False
                .Cells(i, 2).Value = 1
            ElseIf b Then
                .Cells(i, 2).Value = 1
            End If
        Next i
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...