VBA For循环使用If循环

时间:2015-07-20 19:28:41

标签: excel vba excel-vba if-statement for-loop

我的VBA代码存在问题。我尝试比较2列,A列和B列。如果某些数据匹配,例如假设A2包含B3中的文本,那么我需要将单元格C2与列D进行比较。我不明白为什么但是我得到错误“结束如果没有阻止如果”。非常感谢你帮助我们。

这是我的代码:

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  

4 个答案:

答案 0 :(得分:3)

我发现你的if语句的结构有点令人困惑,我不完全确定你可以做一个for循环作为一个单行,以摆脱所有的最终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

这样做没有编译错误,但是如果它做了你想做的事情就无法评论。

答案 1 :(得分:2)

sous2817在他们的回答中提出了一个有趣的问题:如果if语句的主体本身是for循环,1行语句是否有效。答案似乎是“不” - 除非使用冒号语句分隔符将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

答案 2 :(得分:0)

如果一行上的陈述不需要End If声明。

End If without block If

答案 3 :(得分:-2)

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