excelvba的递归搜索
我已经编写了一个excel VBA代码供用户输入id,excel数据表中的相应数据将显示为输出excelvba的递归搜索,vba,excel,Vba,Excel,我已经编写了一个excel VBA代码供用户输入id,excel数据表中的相应数据将显示为输出 Sub finddata() Dim North As Long Dim finalrow As Long Dim i As Long Dim count As Long Sheets("ML").Range("K5:P200").ClearContents North = Sheets("ML").Range("K2").Value final
Sub finddata()
Dim North As Long
Dim finalrow As Long
Dim i As Long
Dim count As Long
Sheets("ML").Range("K5:P200").ClearContents
North = Sheets("ML").Range("K2").Value
finalrow = WorksheetFunction.CountA(Sheet1.Columns(1))
For i = 2 To finalrow
If Cells(i, 4) = North Then
Range(Cells(i, 1), Cells(i, 6)).Copy
Range("K100000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
End If
Next i
End Sub
现在我需要修改代码以递归方式搜索结果。例如,上述搜索的输出单元格id也以不同的Con编号出现在父单元格id字段中。我们也需要招募这些人。此循环应一直持续,直到显示完整的集合。如您在评论中所述,我们将非常感谢您的帮助。findnext;话虽如此,我还是试试这个:
Sub finddata()
Dim North As Long
Dim finalrow As Long
Dim i As Long
Dim count As Long
Sheets("ML").Range("K5:P200").ClearContents
North = Sheets("ML").Range("K2").Value
finalrow = WorksheetFunction.CountA(Sheet1.Columns(1))
With ActiveSheet.Range("A1:F" & finalrow)
Set cellid = .Cells.Find(What:=North)
If Not cellid Is Nothing Then
Do Until cellid Is Nothing
Range(Cells(cellid.Row, 1), Cells(cellid.Row, 6)).Copy
Range("K100000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
Set cellid = .FindNext(cellid)
Loop
End If
End With
End Sub
或者只使用高级过滤器:
sub findRecords()
Range("K3:P200").ClearContents
Range("A1:F" & Range("A" & Rows.Count).End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"K1:K2"), CopyToRange:=Range("K5"), Unique:=False
End Sub
您甚至可以将其放在onChange
事件的工作表代码模块中,并使其在每次在单元格K2中设置条件时自动运行,如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
If Len(Target) >= 5 Then
Application.EnableEvents = False
Else
Exit Sub
End If
Range("K3:P200").ClearContents
Range("A1:F" & Range("A" & Rows.Count).End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"K1:K2"), CopyToRange:=Range("K5"), Unique:=False
Application.EnableEvents = True
End Sub
您可以使用公式和/或……来完成所有这些工作,请澄清您想要什么——最好是使用一些示例数据来显示第二部分的工作原理……看起来您应该研究一下。findnext。此外,这样您就不必遍历所有行,这会减慢速度。@newuser1:为什么要编辑以删除显示所需内容的图像?您可以使用高级过滤器在没有循环的情况下删除它-请参阅我的answer@IRENEG,谢谢你的回答。我试过上面的方法,可惜没有达到预期的效果。从父单元格ID中我们可以得到单元格ID“11011”,“11012”。但是这个单元格ID“11011”也可以出现在ParentCELLID列中。因此我们需要得到子单元格的结果。还有“96280”“可以是其他父母的孩子。通过这种方式,我们需要形成树hi@ourman In banana,感谢您的评论。从父单元格ID中我们可以得到单元格ID“11011”,“11012”。但是这个单元格ID“11011”也可以出现在ParentCELLID列中。因此我们需要得到子单元格的结果。还有“96280”“可以是其他父母的孩子。通过这种方式,我们需要形成tree@newuser1:为此,您可以使用K5-P5中的结果添加进一步的
高级过滤器调用。。。因此,您只将结果唯一记录过滤到另一个位置,并且对于每个结果,调用Adv filter操作。。。