Excel 根据特定文本选择范围,然后用文本填充

Excel 根据特定文本选择范围,然后用文本填充,excel,vba,Excel,Vba,我试图编写一个代码,希望在a列中从头到尾查看选择范围,然后在B列中用“1”填充选择范围。但我的代码只填充了底部,而忽略了顶部。参考这张照片。我如何确保它通过每一行,当它遇到开始时,它将查找最近的结束并填充B列 在VBA中使用Find是一种不稳定的工具。只需在单元格中循环,跟踪您是否处于开始和结束之间,这将简单得多: Sub Select() Dim LastRowA As Long, i As Long, b As Boolean With ThisWorkbook.Work

我试图编写一个代码,希望在a列中从头到尾查看选择范围,然后在B列中用“1”填充选择范围。但我的代码只填充了底部,而忽略了顶部。参考这张照片。我如何确保它通过每一行,当它遇到开始时,它将查找最近的结束并填充B列


在VBA中使用Find是一种不稳定的工具。只需在单元格中循环,跟踪您是否处于开始和结束之间,这将简单得多:

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

在VBA中使用Find是一种不稳定的工具。只需在单元格中循环,跟踪您是否处于开始和结束之间,这将简单得多:

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

这将找到开始,循环直到找到结束。按要求进行测试和工作

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

这将找到开始,循环直到找到结束。按要求进行测试和工作

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

我测试了代码,但我不明白“b=True/False”是如何工作的,在这段代码中选择了开始和结束之间的范围。你介意解释一下吗?谢谢布尔变量仅存储真值或假值。在这里,我使用True来表示何时我是介于开始和结束之间的行号。当我们遇到开始时,它被设置为True;当我们遇到结束时,它被设置为False。对于不是开始或结束的任何其他行,代码查看b的值以确定它是否在开始和结束之间。如果介于开始和结束之间,b将为真,最后一个条件将通过,设置为1。如果不在开始和结束之间,b将为false,最后一个条件将失败,因此这些行上没有设置任何内容。感谢您的详细解释。从未想过布尔真/假可以这样使用!!谢谢我测试了代码,但我不明白“b=True/False”是如何工作的,在这段代码中选择了开始和结束之间的范围。你介意解释一下吗?谢谢布尔变量仅存储真值或假值。在这里,我使用True来表示何时我是介于开始和结束之间的行号。当我们遇到开始时,它被设置为True;当我们遇到结束时,它被设置为False。对于不是开始或结束的任何其他行,代码查看b的值以确定它是否在开始和结束之间。如果介于开始和结束之间,b将为真,最后一个条件将通过,设置为1。如果不在开始和结束之间,b将为false,最后一个条件将失败,因此这些行上没有设置任何内容。感谢您的详细解释。从未想过布尔真/假可以这样使用!!谢谢