2015-07-20 226 views
0

我的VBA代码有问题。我尝试比较2列,A列和B列。例如,如果某些数据匹配,比如说A2包含B3中的文本,那么我需要将单元格C2与列D进行比较。我不明白为什么,但是出现“End If without Block If”错误。非常感谢你帮助球员。VBA For循环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 
+1

您构建的方式你的if语句(一切正对1号线)结束如果没有必要。摆脱结束如果,你应该很好去。 – sous2817

+3

或者 - 如果毕竟在单词'Then“之后插入换行符,则使它们成为块。你使用连续字符的事实表明你的线条变得笨拙。 –

回答

3

,我发现你的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/O编译错误,但如果这样做你想要做什么不能发表评论。

2

sous2817提出在他们的答案约1行语句是否没有工作,如果if语句的身体本身就是一个for循环一个有趣的问题。答案似乎是“不” - 除非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 
+0

这是一个有趣的方式去做! – sous2817

-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 
+1

我低估了这个答案,因为这段代码没有做OP的示例代码试图做的事情,也没有回答有关OP正在接收的错误的问题。 – CBRF23