Excel VBA列的递归循环
有谁能解释一下,如果我可以递归地遍历For循环中的排序列表 我在一个列中循环,一旦我找到了一个精确的匹配项(比如EALOLESstring),我就想继续循环,直到没有匹配项为止。 对于内部循环来说,这一切都很好,但我只是想知道是否也可以通过递归函数来实现这一点,以及它会是什么样子?从我学习的递归示例中,我可以想象从工作簿的末尾到开头循环Excel VBA列的递归循环,excel,vba,recursion,Excel,Vba,Recursion,有谁能解释一下,如果我可以递归地遍历For循环中的排序列表 我在一个列中循环,一旦我找到了一个精确的匹配项(比如EALOLESstring),我就想继续循环,直到没有匹配项为止。 对于内部循环来说,这一切都很好,但我只是想知道是否也可以通过递归函数来实现这一点,以及它会是什么样子?从我学习的递归示例中,我可以想象从工作簿的末尾到开头循环 注意,我并不是说这是一个更好的解决方案,也不是一个内部循环,但我只是很好奇 这不是返回排序列表中字符串的开始和停止位置的有效方法,但作为一种智力练习,应该这样
注意,我并不是说这是一个更好的解决方案,也不是一个内部循环,但我只是很好奇 这不是返回排序列表中字符串的开始和停止位置的有效方法,但作为一种智力练习,应该这样做
dim i as long, j as long
For i = 2 to UsedRange.Rows.Count
If (Cells(i, 12).Value = "EALOLES") Then
for j=i to UsedRange.Rows.Count
If (Cells(j+1, 12).Value <> "EALOLES") Then
exit for
end if
next j
Exit For
End If
next i
debug.print "start: " & i
debug.print "end: " & j
尺寸i等于长,j等于长
对于i=2,使用drange.Rows.Count
如果(单元格(i,12).Value=“EALOLES”),则
对于j=i,使用drange.Rows.Count
如果(单元格(j+1,12)。值为“EALOLES”),则
退出
如果结束
下一个j
退出
如果结束
接下来我
debug.print“开始:”&i
debug.print“结束:”&j
这不是返回排序列表中字符串的开始和停止位置的有效方法,但作为一种智力练习,应该这样做
dim i as long, j as long
For i = 2 to UsedRange.Rows.Count
If (Cells(i, 12).Value = "EALOLES") Then
for j=i to UsedRange.Rows.Count
If (Cells(j+1, 12).Value <> "EALOLES") Then
exit for
end if
next j
Exit For
End If
next i
debug.print "start: " & i
debug.print "end: " & j
尺寸i等于长,j等于长
对于i=2,使用drange.Rows.Count
如果(单元格(i,12).Value=“EALOLES”),则
对于j=i,使用drange.Rows.Count
如果(单元格(j+1,12)。值为“EALOLES”),则
退出
如果结束
下一个j
退出
如果结束
接下来我
debug.print“开始:”&i
debug.print“结束:”&j
您的问题基本上是,这是否是递归的候选者,答案是否定的。在这种情况下,使用内部循环进行迭代是更好的解决方案
阅读文章:了解何时使用每种方法。你的问题基本上是这是递归的候选者,答案是否。在这种情况下,使用内部循环进行迭代是更好的解决方案
阅读这篇文章:学习何时使用每一个。我在思考同一主题时,有一个稍微不同的想法 定义要循环的范围。查看该值是否存在于该范围内。如果是,则从第一个匹配开始,并继续循环循环范围,直到单元格值与指定的目标字符串不同
Option Explicit
Sub StopAtEnd()
Dim wb As Workbook
Dim ws As Worksheet
Dim endRow As Long
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet5") 'change as needed
endRow = ws.Cells(ws.Rows.Count, "L").End(xlUp).Row
Dim loopRange As Range
Set loopRange = ws.Range("L1:L" & endRow) 'Change start row as required
Dim currentCell As Range
Dim targetString As String
Dim startRow As Long
targetString = "EALOLES"
On Error GoTo Errhand
startRow = Application.Match(targetString, loopRange, 0)
Do Until ws.Range("L" & startRow) <> targetString
Debug.Print ws.Range("L" & startRow).Address
startRow = startRow + 1
Loop
Exit Sub
Errhand:
MsgBox "Target string not found"
End Sub
选项显式
子StopAtEnd()
将wb设置为工作簿
将ws设置为工作表
暗尾行与长尾行相同
设置wb=ThisWorkbook
设置ws=wb。工作表(“Sheet5”)根据需要进行更改
endRow=ws.Cells(ws.Rows.Count,“L”).End(xlUp).Row
变暗范围作为范围
设置loopRange=ws.Range(“L1:L”和endRow)”根据需要更改起始行
小电流单元作为量程
将targetString设置为字符串
黯淡的星空如长
targetString=“EALOLES”
在错误上走错
startRow=Application.Match(targetString,loopRange,0)
直到ws.Range(“L”和startRow)targetString
Debug.Print ws.Range(“L”和startRow).Address
startRow=startRow+1
环
出口接头
错误:
MsgBox“未找到目标字符串”
端接头
向@DisplayName大声呼喊,他指出这可以写成:
Option Explicit
Sub StopAtEnd()
Dim wb As Workbook
Dim ws As Worksheet
Dim endRow As Long
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1") 'change as needed
endRow = ws.Cells(ws.Rows.Count, "L").End(xlUp).Row
Dim loopRange As Range
Set loopRange = ws.Range("L1:L" & endRow) 'Change start row as required
Dim currentCell As Range
Dim targetString As String
Dim startRow As Variant
targetString = "EALOLES"
startRow = Application.Match(targetString, loopRange, 0)
If IsError(startRow) Then
MsgBox "Target string not found"
Else
Do Until ws.Range("L" & startRow) <> targetString
Debug.Print ws.Range("L" & startRow).Address
startRow = startRow + 1
Loop
End If
End Sub
选项显式
子StopAtEnd()
将wb设置为工作簿
将ws设置为工作表
暗尾行与长尾行相同
设置wb=ThisWorkbook
设置ws=wb。工作表(“Sheet1”)根据需要进行更改
endRow=ws.Cells(ws.Rows.Count,“L”).End(xlUp).Row
变暗范围作为范围
设置loopRange=ws.Range(“L1:L”和endRow)”根据需要更改起始行
小电流单元作为量程
将targetString设置为字符串
Dim startRow作为变体
targetString=“EALOLES”
startRow=Application.Match(targetString,loopRange,0)
如果是IsError(startRow),那么
MsgBox“未找到目标字符串”
其他的
直到ws.Range(“L”和startRow)targetString
Debug.Print ws.Range(“L”和startRow).Address
startRow=startRow+1
环
如果结束
端接头
对于同一主题,我的思考方式略有不同
定义要循环的范围。查看该值是否存在于该范围内。如果是,则从第一个匹配开始,并继续循环循环范围,直到单元格值与指定的目标字符串不同
Option Explicit
Sub StopAtEnd()
Dim wb As Workbook
Dim ws As Worksheet
Dim endRow As Long
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet5") 'change as needed
endRow = ws.Cells(ws.Rows.Count, "L").End(xlUp).Row
Dim loopRange As Range
Set loopRange = ws.Range("L1:L" & endRow) 'Change start row as required
Dim currentCell As Range
Dim targetString As String
Dim startRow As Long
targetString = "EALOLES"
On Error GoTo Errhand
startRow = Application.Match(targetString, loopRange, 0)
Do Until ws.Range("L" & startRow) <> targetString
Debug.Print ws.Range("L" & startRow).Address
startRow = startRow + 1
Loop
Exit Sub
Errhand:
MsgBox "Target string not found"
End Sub
选项显式
子StopAtEnd()
将wb设置为工作簿
将ws设置为工作表
暗尾行与长尾行相同
设置wb=ThisWorkbook
设置ws=wb。工作表(“Sheet5”)根据需要进行更改
endRow=ws.Cells(ws.Rows.Count,“L”).End(xlUp).Row
变暗范围作为范围
设置loopRange=ws.Range(“L1:L”和endRow)”根据需要更改起始行
小电流单元作为量程
将targetString设置为字符串
黯淡的星空如长
targetString=“EALOLES”
在错误上走错
startRow=Application.Match(targetString,loopRange,0)
直到ws.Range(“L”和startRow)targetString
Debug.Print ws.Range(“L”和startRow).Address
startRow=startRow+1
环
出口接头
错误:
MsgBox“未找到目标字符串”
端接头
向@DisplayName大声呼喊,他指出这可以写成:
Option Explicit
Sub StopAtEnd()
Dim wb As Workbook
Dim ws As Worksheet
Dim endRow As Long
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1") 'change as needed
endRow = ws.Cells(ws.Rows.Count, "L").End(xlUp).Row
Dim loopRange As Range
Set loopRange = ws.Range("L1:L" & endRow) 'Change start row as required
Dim currentCell As Range
Dim targetString As String
Dim startRow As Variant
targetString = "EALOLES"
startRow = Application.Match(targetString, loopRange, 0)
If IsError(startRow) Then
MsgBox "Target string not found"
Else
Do Until ws.Range("L" & startRow) <> targetString
Debug.Print ws.Range("L" & startRow).Address
startRow = startRow + 1
Loop
End If
End Sub
选项显式
子StopAtEnd()
将wb设置为工作簿
将ws设置为工作表
暗尾行与长尾行相同
设置wb=ThisWorkbook
设置ws=wb。工作表(“Sheet1”)根据需要进行更改
endRow=ws.Cells(ws.Rows.Count,“L”).End(xlUp).Row
变暗范围作为范围
设置loopRange=ws.Range(“L1:L”和endRow)”根据需要更改起始行
小电流单元作为量程
将targetString设置为字符串
Dim startRow作为变体
targetString=“EALOLES”
startRow=Application.Match(targetString,loopRange,0)
如果是IsError(startRow),那么
MsgBox“未找到目标字符串”
其他的
直到ws.Range(“L”和startRow)targetString
Debug.Print ws.Range(“L”和startRow).Address
startRow=startRow+1
环
如果结束
端接头
假设您的数据已排序,您可以选择ad