VBA For循环与If循环

我的VBA代码有问题。 我尝试比较2列,A列和B列。 如果一些数据匹配,比如我们说A2包含B3中的文本,那么我需要比较单元格C2和列D.我不明白为什么,但是我得到错误“End If without block If”。 非常感谢你帮助你们。

这是我的代码:

Sub Compare() For i = 1 To 100 For j = 1 To 50 If InStr(1, ActiveSheet.Cells(i, 1).Value, ActiveSheet.Cells(j, 2).Value, vbTextCompare) <> 0 _ Then For k = 1 To 20 If InStr(1, ActiveSheet.Cells(i, 3).Value, ActiveSheet.Cells(k, 4).Value, vbTextCompare) <> 0 Then MsgBox i End If Next k End If Next j Next i End Sub 

我发现你的if语句的结构有点令人困惑,我不能完全确定你可以做一个循环,就像这样去掉所有的结束ifs。 对于它的价值,我认为这个代码更容易遵循:

 Sub Compare() For i = 1 To 100 For j = 1 To 50 If InStr(1, ActiveSheet.Cells(i, 1).Value, ActiveSheet.Cells(j, 2).Value, vbTextCompare) <> 0 Then For k = 1 To 20 If InStr(1, ActiveSheet.Cells(i, 3).Value, ActiveSheet.Cells(k, 4).Value, vbTextCompare) <> 0 Then MsgBox i Next k End If Next j Next i End Sub 

这运行w / oa编译错误,但不能评论,如果它做你想做的事情。

如果if语句的本体本身是一个for循环,那么sous2817在他们的回答中提出了一个有趣的问题,即单行语句是否有效。 答案似乎是“否” – 除非通过使用冒号语句分隔符for循环本身被挤压到一行:

 Sub test1() 'compile error Dim i As Long, s As Long If i = 0 _ Then For i = 1 To 10 s = s + i Next i MsgBox s End Sub Sub test2() 'compiles okay Dim i As Long, s As Long If i = 0 _ Then For i = 1 To 10: s = s + i: Next i MsgBox s End Sub 

如果一行中的语句不需要End If语句。

结束如果没有块如果

 Sub comparison() For i = 2 To 1000 For j = 2 To 1000 If Worksheets(Worksheet).Range("A" & i).Value = Worksheets(Worksheet).Range("L" & j).Value Then Worksheets(worksheet).Range("N" & j).Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With End If Next j Next i End Sub