Vba 退出';每个';当某些条件为真时循环
我需要检查表1第X列中的所有行,获取其值,然后查看值是否在表2第A列和B列中存储的数字组合之间。如果值在之间,则在表1第Y列中显示表2第C列中的值(这将是一个非常简单的SQL查询) 我对VBA非常生疏,所以当存在匹配时,我无法退出内部循环,并将值从Sheet2粘贴到Sheet1Vba 退出';每个';当某些条件为真时循环,vba,excel,Vba,Excel,我需要检查表1第X列中的所有行,获取其值,然后查看值是否在表2第A列和B列中存储的数字组合之间。如果值在之间,则在表1第Y列中显示表2第C列中的值(这将是一个非常简单的SQL查询) 我对VBA非常生疏,所以当存在匹配时,我无法退出内部循环,并将值从Sheet2粘贴到Sheet1 Sub FindBetweenIP() Dim ws1 As Worksheet Set ws1 = Sheets(1) Dim ws2 As Worksheet Set ws2 =
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
Sub-FindBetweenIP()
将ws1设置为工作表
设置ws1=图纸(1)
将ws2设置为工作表
设置ws2=图纸(2)
对于ws1.Range(“X2:X”和ws1.Range(“X”)和Rows.Count.End(xlUp.Row)中的每个单元格
对于ws2.Range(“A2:A”和ws1.Range(“A”)和Rows.Count.End(xlUp.Row)中的每个cell2
ip_range1=单元格2.Value2
ip_range2=cell2.偏移量(0,1).值2
isp=单元2。偏移量(0,2)。值2
如果VBA中的(cell.Value>=ip_range1和cell.Value,则应使用“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
Sub-FindBetweenIP()
将ws1设置为工作表
设置ws1=图纸(1)
将ws2设置为工作表
设置ws2=图纸(2)
对于ws1.Range(“X2:X”和ws1.Range(“X”)和Rows.Count.End(xlUp.Row)中的每个单元格
对于ws2.Range(“A2:A”和ws1.Range(“A”)和Rows.Count.End(xlUp.Row)中的每个cell2
ip_range1=单元格2.Value2
ip_range2=cell2.偏移量(0,1).值2
isp=单元2。偏移量(0,2)。值2
如果(cell.Value>=ip_range1和cell.Value您正在查找表达式“Exit”。在本例中,它看起来是这样的:
For i = 1 to 10
[Do statements]
[If Test]
Exit For
[End If]
Next i
以这种方式退出循环基本上就像代码跳转到“下一个i”,i已经等于最大循环值。除了等级“Eh”Bacon所说的退出
之外,第二个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)
出于对我的前辈的尊重,我发现在这种情况下,退出进近并不能正确地同步外环和内环。我已经制定了另一种方法,该方法工作正常并给出正确的结果。我将得到纠正,因为我在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
Sub-FindBetweenIP()
将ws1设置为工作表
设置ws1=图纸(1)
将ws2设置为工作表
设置ws2=图纸(2)
对于ws1.Range(“X2:X”和ws1.Range(“X”)和Rows.Count.End(xlUp.Row)中的每个单元格
Foundone=False
对于ws2.Range(“A2:A”和ws2.Range(“A”)和Rows.Count.End(xlUp.Row)中的每个cell2
如果cell2.Row=cell.Row,Foundone=False,则
ip_range1=单元格2.Value2
ip_range2=cell2.偏移量(0,1).值2
isp=单元2。偏移量(0,2)。值2
如果(cell.Value>=ip_range1和cell.Value您要查找的行,我相信是Exit for
,这将退出第二个循环并转到第一个循环中的下一个迭代。上面的代码是否不起作用?是否不起作用…?如果您想退出循环,可以使用Exit for
,这将退出它所处的循环。我使用Exit for-它起作用了;虽然我不明白为什么找到的值没有保存回Sheet 1您的值是如何格式化的?我发现您的帖子非常有趣,因为它涵盖了经常发生的情况。我的VBA水平很低,因此请您告诉我最后四行如何~Exit for End If Next~或其他方式大约。如果您能用最终解决方案编辑您的帖子以供他人参考,我将不胜感激。经验法则是尽可能避免转到,因为使用它会导致代码变得比必要时更复杂。在某些情况下,它可能有用(尤其是在创建错误处理时),但只要可以避免,就应该避免。强烈建议不要使用GoTo
(有一些例外)。OP应该只使用Exit For
。