VBA For循环If循环
我的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
,我发现你的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编译错误,但如果这样做你想要做什么不能发表评论。
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
这是一个有趣的方式去做! – sous2817
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
我低估了这个答案,因为这段代码没有做OP的示例代码试图做的事情,也没有回答有关OP正在接收的错误的问题。 – CBRF23
您构建的方式你的if语句(一切正对1号线)结束如果没有必要。摆脱结束如果,你应该很好去。 – sous2817
或者 - 如果毕竟在单词'Then“之后插入换行符,则使它们成为块。你使用连续字符的事实表明你的线条变得笨拙。 –