2015-07-20 268 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