满足某些条件时退出“ For Each”循环

And*_*rew 2 excel vba excel-vba

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

我对VBA感到非常生锈,因此在存在匹配项时无法退出内部循环,并将Value从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
Run Code Online (Sandbox Code Playgroud)

Gra*_*con 5

您正在寻找表达式“ Exit”。在这种情况下,它看起来像这样:

For i = 1 to 10

    [Do statements]
    [If Test]
        Exit For
    [End If]
 Next i
Run Code Online (Sandbox Code Playgroud)

以这种方式退出循环实际上就像代码已跳至“ Next i”一样,而i已经等于最大循环值。


Sco*_*ner 4

除了 Grade 'Eh' Bacon 所说的之外,Exit For您似乎在第二个 for 循环范围上有一点脱节:

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

你从 ws2 开始,但在里面你引用了 ws1

将其更改为:

For Each cell2 In ws2.Range("A2:A" & ws2.Range("A" & ws2.Rows.Count).End(xlUp).Row)
Run Code Online (Sandbox Code Playgroud)