在现有If块中添加新的If语句

Dan*_*n S 3 excel vba excel-vba

我有这个代码比较列A和B,如果A更大,则将1加到B列:

Sub test07()

    With Sheets("Sheet1")

        Dim LastRow As Long, i As Long

        LastRow = Cells(Rows.Count, "A").End(xlUp).Row

        For i = 12 To LastRow

            If Range("A" & i).Value > Range("B" & i).Value Then

                Range("B" & i).Value = Range("B" & i).Value + 1

            End If

        Next i

    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

我想再次添加相同的东西,但使用C和D列,但我得到语法错误,即:

Sub test07()

    With Sheets("Sheet1")

        Dim LastRow As Long, i As Long

        LastRow = Cells(Rows.Count, "A").End(xlUp).Row

        For i = 12 To LastRow

            If Range("A" & i).Value > Range("B" & i).Value Then

                Range("B" & i).Value = Range("B" & i).Value + 1

            If Range("C" & i).Value > Range("D" & i).Value Then

                Range("D" & i).Value = Range("D" & i).Value + 1

            End If

        Next i

    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

任何人都可以看到我错在哪里?非常感谢

小智 5

正如评论中提到的,你错过了一个End If.但是,您也没有充分利用使用With ... End With语句来识别工作表所附带的显式父项.

Sub test07()
    Dim lastRow As Long, i As Long
    With Sheets("Sheet1")
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 12 To lastRow
            If .Range("A" & i).Value > .Range("B" & i).Value Then
                .Range("B" & i).Value = .Range("B" & i).Value + 1
            End If   '<~~might have to be three lines down depending upon how you want your logic to flow
            If .Range("C" & i).Value > .Range("D" & i).Value Then
                .Range("D" & i).Value = .Range("D" & i).Value + 1
            End If
        Next i
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

注意使用.Range.Cells; 不是RangeCells.前缀句点(也称为句号)将范围和单元格与中引用的工作表相关联With ... End With.

回到这个If ... End If问题,如果你想避免关闭If语句,你可以使用它们,如下所示.

Sub test07()
    Dim lastRow As Long, i As Long
    With Sheets("Sheet1")
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 12 To lastRow
            If .Range("A" & i).Value > .Range("B" & i).Value Then _
                .Range("B" & i).Value = .Range("B" & i).Value + 1
            If .Range("C" & i).Value > .Range("D" & i).Value Then _
                .Range("D" & i).Value = .Range("D" & i).Value + 1
        Next i
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

此方法仅适用于代码行之后的单个相关If代码行.