当某些条件为真时退出“For Each”循环

我需要查看X列中Sheet1上的所有行,获取其值,然后查看是否存储在Sheet 2列A和B上的BETWEEN数字组合。如果值介于两者之间,则显示Sheet 2中C列的值工作表1列Y(将是一个非常简单的SQL查询)。

我在VBA上很生锈,所以我不能退出内部循环时,匹配,并将Sheet2粘贴到Sheet1。

Sub FindBetweenIP() Dim ws1 As Worksheet Set ws1 = Sheets(1) Dim ws2 As Worksheet Set ws2 = Sheets(2) For Each cell In ws1.Range("X2:X" & ws1.Range("X" & Rows.Count).End(xlUp).Row) For Each cell2 In ws2.Range("A2:A" & ws1.Range("A" & Rows.Count).End(xlUp).Row) ip_range1 = cell2.Value2 ip_range2 = cell2.Offset(0, 1).Value2 isp = cell2.Offset(0, 2).Value2 If (cell.Value >= ip_range1 And cell.Value <= ip_range2) Then cell.Offset(0, 1).Value2 = isp 'Seems to be not working ' ALSO, VALUE FOUND-- EXIT INNER LOOP End If Next Next End Sub 

除了什么等级“Eh”培根关于Exit For说关于它似乎有一点断开第二个循环范围:

 For Each cell2 In ws2.Range("A2:A" & ws1.Range("A" & Rows.Count).End(xlUp).Row) 

你从ws2开始,但在你的内部引用ws1

将其更改为:

 For Each cell2 In ws2.Range("A2:A" & ws2.Range("A" & ws2.Rows.Count).End(xlUp).Row) 

你正在寻找expression“退出”。 在这种情况下,它看起来像这样:

 For i = 1 to 10 [Do statements] [If Test] Exit For [End If] Next i 

以这种方式退出一个循环基本上就像代码被跳转到“Next i”一样,我已经等于最大循环值。

在尊重我的前辈的情况下,我发现在这种情况下退出的方法并不是同步外部和内部循环。 我制定了另一种正确工作的方法,并给出了正确的结果。 我的立场是纠正,因为可能我的专业知识在VBA不是我的老人和更有经验的人在这里的水平。

  Sub FindBetweenIP() Dim ws1 As Worksheet Set ws1 = Sheets(1) Dim ws2 As Worksheet Set ws2 = Sheets(2) For Each cell In ws1.Range("X2:X" & ws1.Range("X" & Rows.Count).End(xlUp).Row) Foundone = False For Each cell2 In ws2.Range("A2:A" & ws2.Range("A" & Rows.Count).End(xlUp).Row) If cell2.Row = cell.Row And Foundone = False Then ip_range1 = cell2.Value2 ip_range2 = cell2.Offset(0, 1).Value2 isp = cell2.Offset(0, 2).Value2 If (cell.Value >= ip_range1 And cell.Value <= ip_range2) Then cell.Offset(0, 1).Value2 = isp Foundone = True End If End If Next Next End Sub 

在VBA中,您只需使用“goto”命令。 例如:

 Sub FindBetweenIP() Dim ws1 As Worksheet Set ws1 = Sheets(1) Dim ws2 As Worksheet Set ws2 = Sheets(2) For Each cell In ws1.Range("X2:X" & ws1.Range("X" & Rows.Count).End(xlUp).Row) For Each cell2 In ws2.Range("A2:A" & ws1.Range("A" & Rows.Count).End(xlUp).Row) ip_range1 = cell2.Value2 ip_range2 = cell2.Offset(0, 1).Value2 isp = cell2.Offset(0, 2).Value2 If (cell.Value >= ip_range1 And cell.Value <= ip_range2) Then cell.Offset(0, 1).Value2 = isp GoTo ExitInnerLoop: End If Next ExitInnerLoop: Next End Sub