Vba 当结果只有一行时,循环查找并跳过

Vba 当结果只有一行时,循环查找并跳过,vba,excel,Vba,Excel,我以前做过一些基本的VBA,但对这门语言还是很陌生。这是我第一次发帖,所以我希望我的发帖正确而清晰 我目前在一份工作表的E栏中找到了具体的标准。我当前的代码工作正常,但不会循环,我只希望它在有2行或更多行符合该条件时复制这些行。如果只有1行匹配,那么我想跳过它 在我下面的代码中,我知道“E04”以2+行的形式出现,所以我想将这些行复制到第二张名为“Misc”的工作表中。但是,如果我的条件是“E01”,结果只有一行,那么我想跳过这个,继续搜索“E02”,以此类推。我现在在代码中的循环是继续搜索我命

我以前做过一些基本的VBA,但对这门语言还是很陌生。这是我第一次发帖,所以我希望我的发帖正确而清晰

我目前在一份工作表的E栏中找到了具体的标准。我当前的代码工作正常,但不会循环,我只希望它在有2行或更多行符合该条件时复制这些行。如果只有1行匹配,那么我想跳过它

在我下面的代码中,我知道“E04”以2+行的形式出现,所以我想将这些行复制到第二张名为“Misc”的工作表中。但是,如果我的条件是“E01”,结果只有一行,那么我想跳过这个,继续搜索“E02”,以此类推。我现在在代码中的循环是继续搜索我命名的条件(“E04”),但我没有循环来继续下一个条件

这是我目前的代码:

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。感谢您的提示,我将对此进行研究。现在接受答案,谢谢你的帮助。