Vba 当结果只有一行时,循环查找并跳过
我以前做过一些基本的VBA,但对这门语言还是很陌生。这是我第一次发帖,所以我希望我的发帖正确而清晰 我目前在一份工作表的E栏中找到了具体的标准。我当前的代码工作正常,但不会循环,我只希望它在有2行或更多行符合该条件时复制这些行。如果只有1行匹配,那么我想跳过它 在我下面的代码中,我知道“E04”以2+行的形式出现,所以我想将这些行复制到第二张名为“Misc”的工作表中。但是,如果我的条件是“E01”,结果只有一行,那么我想跳过这个,继续搜索“E02”,以此类推。我现在在代码中的循环是继续搜索我命名的条件(“E04”),但我没有循环来继续下一个条件 这是我目前的代码:Vba 当结果只有一行时,循环查找并跳过,vba,excel,Vba,Excel,我以前做过一些基本的VBA,但对这门语言还是很陌生。这是我第一次发帖,所以我希望我的发帖正确而清晰 我目前在一份工作表的E栏中找到了具体的标准。我当前的代码工作正常,但不会循环,我只希望它在有2行或更多行符合该条件时复制这些行。如果只有1行匹配,那么我想跳过它 在我下面的代码中,我知道“E04”以2+行的形式出现,所以我想将这些行复制到第二张名为“Misc”的工作表中。但是,如果我的条件是“E01”,结果只有一行,那么我想跳过这个,继续搜索“E02”,以此类推。我现在在代码中的循环是继续搜索我命
Dim FirstAddress As String, _
cF As Range, _
RowsToCopy As String
ActiveSheet.Cells(1, 5).Activate
With ActiveSheet.Columns(5)
Set cF = .Find(What:="E04", _
After:=ActiveCell, _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not cF Is Nothing Then
FirstAddress = cF.Address
Do
cF.EntireRow.Copy
Sheets("Misc").Range("A" & Sheets("Misc").Range("A" & Rows.Count).End(xlUp).Row + 1).PasteSpecial xlPasteValues
Set cF = .FindNext(cF)
Loop While Not cF Is Nothing And cF.Address <> FirstAddress
End If
End With
Dim FirstAddress作为字符串_
cF作为范围_
行复制为字符串
单元格(1,5)。激活
使用ActiveSheet.Columns(5)
设置cF=.Find(内容:=“E04”_
之后:=ActiveCell_
LookIn:=xl公式_
看:=xlPart_
SearchOrder:=xlByColumns_
SearchDirection:=xlNext_
MatchCase:=假_
SearchFormat:=False)
如果不是,那么cF什么都不是
FirstAddress=cF.地址
做
cF.EntireRow.Copy
工作表(“杂项”)范围(“A”和工作表(“杂项”)范围(“A”和行数)。结束(xlUp)。行+1)。粘贴特殊xlPasteValues
设置cF=.FindNext(cF)
循环而非cF为Nothing且cF.Address为FirstAddress
如果结束
以
还有,这里是我的工作表的一点样子。。。
您可以看到,我希望跳过E01-E03,对E04执行操作,然后跳过E05-E09,然后对E10执行操作
任何帮助都将不胜感激!我已经在网上寻找了几个小时的答案,但没有找到任何适合我的答案。一种方法是使用COUNTIF公式检查该术语在E列中出现了多少次。我不确定您是否也在询问如何循环。我建议您用实际的工作表名称替换ActiveSheet,因为它更健壮
Sub x()
Dim FirstAddress As String, _
cF As Range, _
RowsToCopy As String
Dim s As String
s = "EO4"
With ActiveSheet.Columns(5)
If WorksheetFunction.CountIf(.Cells, s) > 1 Then
Set cF = .Find(What:=s, _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not cF Is Nothing Then
FirstAddress = cF.Address
Do
cF.EntireRow.Copy
Sheets("Misc").Range("A" & Sheets("Misc").Range("A" & Rows.Count).End(xlUp).Row + 1).PasteSpecial xlPasteValues
Set cF = .FindNext(cF)
Loop While Not cF Is Nothing And cF.Address <> FirstAddress
End If
End If
End With
End Sub
subx()
将FirstAddress设置为字符串_
cF作为范围_
行复制为字符串
像线一样变暗
s=“EO4”
使用ActiveSheet.Columns(5)
如果工作表function.CountIf(.Cells,s)>1,则
设置cF=.Find(What:=s_
LookIn:=xl公式_
看:=xlother_
SearchOrder:=xlByColumns_
SearchDirection:=xlNext_
MatchCase:=假_
SearchFormat:=False)
如果不是,那么cF什么都不是
FirstAddress=cF.地址
做
cF.EntireRow.Copy
工作表(“杂项”)范围(“A”和工作表(“杂项”)范围(“A”和行数)。结束(xlUp)。行+1)。粘贴特殊xlPasteValues
设置cF=.FindNext(cF)
循环而非cF为Nothing且cF.Address为FirstAddress
如果结束
如果结束
以
端接头
谢谢SJR!这对我的第一个关注点来说非常有效,我以前很少使用COUNTIF,所以我从来没有想过,非常感谢。而且,是的,我问的是如何循环搜索条件。到现在为止,我需要特别说明E01、E02、E03等等。然而,我想循环所有这些搜索可能性,从E01到E100。对不起,我不太清楚这部分的问题。这是一个固定的东西,E1到E100,还是它不同?它不同,但我不认为它会超过E100。例如,目前的工作表上升到E57,但下次报告可能会高于或低于E57。感谢您的提示,我将对此进行研究。现在接受答案,谢谢你的帮助。