使用VBA在Excel中设置过滤器

时间:2011-09-08 12:52:18

标签: excel vba excel-vba

下面的宏将允许我在工作表1的标题中找到一个名称,并将整个列复制到工作表2.现在我想继续代码,但我遇到了一个问题,我将尝试解释。

Sub CopyColumnByTitle()
'Find "Name" in Row 1
  With Sheets(1).Rows(1)
   Set t = .Find("Name", lookat:=xlpart)
'If found, copy the column to Sheet 2, Column A
'If not found, present a message
     If Not t Is Nothing Then
        Columns(t.Column).EntireColumn.Copy _
          Destination:=Sheets(2).Range("A1")
       Else: MsgBox "Title Not Found"
     End If
  End With
End Sub

将所有数据粘贴到表2中,如下所示....

Sheet 2
Name Age Address    Date of Birth
John    25  US  1-Sep-11
Hary    26  US  1-Sep-11
John    27  UK  1-Sep-11
Hary    28  US  2-Sep-11
King    29  UK  3-Sep-11
Peter   30  US  3-Sep-11

我需要设置过滤器,如下所示,并将过滤后的数据复制到第3页,如上所示:

  1. 我需要在表2上设置过滤条件,这有助于我查看等于“John”或“Hary”的Name,并将整个数据复制并粘贴到表3中。
  2. 我需要设置另一个过滤器,其中Name等于“John”且Date of Birth等于“1-Sep-11”(注意日期应该始终是昨天)。复制并粘贴整个 数据到表4中。
  3. 第三次,我需要设置一个Name等于“King”的过滤器,然后将整个数据复制到第5页。

  4. 非常感谢John的回复,你给出的答复是有效的,但由于紧急要求,我已经设计了我的代码。

    我需要一点帮助。我粘贴了部分代码,因为无法粘贴整个代码。

    代码允许我将数据从一个工作簿复制到另一个工作簿,但在复制数据时,我需要复制整个列,因为其中有一些空白单元格。因此,如果我不使用.EntireColumn,则宏不会在空白单元格之后复制单元格。现在,在将数据粘贴到其他工作簿时,我需要粘贴它而不使用标题。

    如果你帮我解决这个问题,我将不胜感激。

    Windows("macro2.xlsm").Activate
    Range(Range("M2"), Range("N2").End(xlDown)).EntireColumn.Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("formula.xls").Activate
    Range(Range("I2"), Range("J2").End(xlDown)).EntireColumn.Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    

1 个答案:

答案 0 :(得分:2)

任务1:

 thisworkbook.sheets(2).activate
 activesheet.range("A:A").select 'set column you filter for probable names here
 Selection.AutoFilter Field:=1, Criteria1:="=John", Operator:=xlOr, _
 Criteria2:="=Hary" ' filters  only for hary or john 
 activate.usedrange.select ' now select the filtered sheet to copy  
 selection.copy 
 ActiveSheet.ShowAllData ' now retain back the data so that you get your original file
 thisworkbook.sheets(3).activate  'select your sheet3 and paste it
 activate.range("A1").select
 activesheet.paste

任务2:

 thisworkbook.sheets(2).activate
 activesheet.range("A:A").select \\'set column you filter for probable names here
 Selection.AutoFilter Field:=1, Criteria1:="John" \\ filters for john
 Selection.AutoFilter Field:=2, Criteria1:="1-sep-2011"  \\ filters for date only for john rows 
 activate.usedrange.select ' now select the filtered sheet to copy  
 selection.copy 
 ActiveSheet.ShowAllData ' now retain back the data so that you get your original file
 thisworkbook.sheets(4).activate  'select your sheet3 and paste it
 activate.range("A1").select
 activesheet.paste

任务3

 thisworkbook.sheets(2).activate
 activesheet.range("A:A").select 'set column you filter for probable names here
 Selection.AutoFilter Field:=1, Criteria1:="=King" ' filters  only king 
 activate.usedrange.select ' now select the filtered sheet to copy  
 selection.copy 
 ActiveSheet.ShowAllData ' now retain back the data so that you get your original file
 thisworkbook.sheets(5).activate  'select your sheet3 and paste it
 activate.range("A1").select
 activesheet.paste

可能它可能会让你知道如何做到这一点。任何疑问都可以随意问我。

谢谢!你可能会去复制目的地:=还有很多方法可以做到。实际上我现在必须走了,所以我只是给你一个样品作品。