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; 不是Range和Cells.前缀句点(也称为句号)将范围和单元格与中引用的工作表相关联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代码行.