过滤数据并使用VBA将结果从一个工作簿复制到另一个工作簿

时间:2016-11-29 12:12:48

标签: excel excel-vba macros copy-paste vba

我有2个工作簿说工作簿1和工作簿2.需要在工作簿2中放置一个过滤器,在G列中使用过滤器“INTDN”,并在工作簿1,列“B”中复制列“O”和列“J”列“I”分别。

任何人都可以为此提供VBA代码吗?

工作簿和工作表名称可以是任何内容,具体取决于来源,但格式始终相同。

更多信息供您参考: -

练习册2 在第12行G列中添加一个过滤器: - “INTDN”

练习册1 将复制的数据从列“O”粘贴到单元格B25向下。 将复制的数据从“J”列粘贴到单元格I25向下。

然后我将把这个宏分配给我需要它的每个工作表。

我是VBA的新手。感谢您的帮助。

这是我能写的: -

Sub CopyData()
'
' CopyData Macro
'

'
    Windows("Book1 (8).xlsx").Activate
    Range("A12").Select
    Selection.AutoFilter
    Range("G12").Select
    ActiveSheet.Range("$A$12:$AV$72").AutoFilter Field:=7, Criteria1:="INTDV"
    Range("O35").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("DebitNotes.xlsm").Activate
    ActiveSheet.Paste
    Range("I25").Select
    Windows("Book1 (8).xlsx").Activate
    Range("J35").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range("J35:J72").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("DebitNotes.xlsm").Activate
    ActiveSheet.Paste
End Sub

2 个答案:

答案 0 :(得分:0)

此代码将复制sheet1上的列O的值并复制到sheet2中的列P的末尾。 我也把它变成了通用的,因此它可以用于任何列和表。

Sub Test()
    Call CopyColumn("Sheet1", "O", "Sheet2", "P") 
End Sub

Function CopyColumn(sourceSheetName As String, sourceColIndex As String, destSheetName As String, destColIndex As String)
    Dim lastRowSource As Integer: lastRowSource = Sheets(sourceSheetName).Cells(Rows.Count, sourceColIndex).End(xlUp).Row
    Dim lastRowDest As Integer: lastRowDest = Sheets(destSheetName).Cells(Rows.Count, destColIndex).End(xlUp).Row
    Sheets(sourceSheetName).Range(sourceColIndex & "1:" & sourceColIndex & lastRowSource).Copy Destination:=Sheets(destSheetName).Range(destColIndex & lastRowDest + 1)
End Function

答案 1 :(得分:0)

我有这个最终的代码,工作正常。唯一的问题是我希望此代码适用于任何打开的工作簿>工作表。工作簿或工作表的名称可以是任何名称。这不在我的掌控之中。

Sub CopyPaste()
'
' CopyPaste Macro
'

'
    Range("H11").Select
    ActiveCell.FormulaR1C1 = "=TODAY()"
    Range("H12").Select
    Windows("Data1.xlsx").Activate
    Range("A12").Select
    Selection.AutoFilter
    Range("G12").Select
    ActiveSheet.Range("A12").AutoFilter Field:=7, Criteria1:="INTDV"
    Range("O35").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("DebitNotes.xlsm").Activate
    Range("B25").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("I25").Select
    Windows("Data1.xlsx").Activate
    Range("J35").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("DebitNotes.xlsm").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("I207").Select
    Selection.End(xlUp).Select
    Selection.End(xlUp).Select
    Selection.End(xlUp).Select
    Selection.ClearContents
    Range("I207").Select
    Columns("I:I").EntireColumn.AutoFit
    Columns("H:H").EntireColumn.AutoFit
    Range("I207").Select
End Sub