将基于多个条件的select复制粘贴到VBA中的另一个工作表中

我对VBA很新,并且使用macros录制器来创buildmacros。 macroslogging器只能带我到目前为止,我能够完成我所需要做的2/3。

我试图创build一个macros,我需要在三列中满足条件,复制满足条件的行,并将其粘贴到工作簿上。 标准是“公开”“关键”和“date”。 这是棘手的部分,date或者需要大于特定的date,通过用户input或在第三个工作表中引用单元格。 有几千行,大约19列,所有的代码,我试图导致崩溃的Excel。

获取前两个标准的代码示例:

Sheets("Sheet1").Select ActiveSheet.ListObjects("Table_owssvr").Range.AutoFilter Field:=12, _ Criteria1:="Open" ActiveSheet.ListObjects("Table_owssvr").Range.AutoFilter Field:=16, _ Criteria1:="Critical" Range("Table_owssvr").Select Range("Q83").Activate Selection.Copy Sheets("Sheet2").Select Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select ActiveSheet.Paste 

一个 – – – – – – – – – – – – – – – – – – – – – – – – – —————-乙——————————— ————————– C打开———————- – – – – – – – – – – – – – – – – -危急 – – – – – – – – ———————————- 1/25 —打开——— – – – – – – – – – – – – – – – – – – – – – – – 高 – – ————————————————– -3/25已closures——————————————— – – – -危急 – – – – – – – – – – – – – – – – – – – – – ———- 3/24打开———————————— – – – – – – – – – 危急 – – – – – – – – – – – – – – – – ———————- 1/25

任何帮助将是伟大的!

如果你打算写VBA,你将不得不最终停止依靠。select。 logging的代码很短,但通常是冗长而低效的。

 Option Explicit Sub wqewqwew() Dim col1 As Long, col2 As Long, col3 As Long, dt As Date Dim ws2 As Worksheet Set ws2 = Worksheets("sheet2") With Worksheets("sheet1").ListObjects("Table_owssvr") With .HeaderRowRange col1 = Application.Match("open", .Cells, 0) col2 = Application.Match("critical", .Cells, 0) col3 = Application.Match("date", .Cells, 0) dt = CDate(Application.InputBox(prompt:="greater then when?", Title:="pick date", Default:=Date)) End With With .Range .AutoFilter .AutoFilter field:=col1, Criteria1:="open" .AutoFilter field:=col2, Criteria1:="critical" .AutoFilter field:=col3, Criteria1:=">" & dt End With With .DataBodyRange If CBool(Application.Subtotal(103, .Cells)) Then .Copy Destination:=ws2.Range("A" & Rows.Count).End(xlUp).Offset(1, 0) End If End With With .Range 'turn off filters .AutoFilter End With End With End Sub 

你可能会想研究错误控制,并添加一些上述。

推荐阅读: 如何避免在Excel VBA中使用select 。

我是这样devise的 尝试一下。

完整的文件在链接下面

下载文件

工作表1:这是你的行数据和点击functionbutton

工作表2:根据“打开”和“关键”和“date”(根据工作表3input“date”

工作表3:input你想要的date

完整的代码如下

 Option Explicit Private Sub Click_Click() Dim i As Integer For i = 2 To Worksheets("Sheet1").Range("A65536").End(xlUp).Row If Worksheets("Sheet1").Range("A" & i) = "Open" And _ Worksheets("Sheet1").Range("B" & i) = "Critical" And _ Worksheets("Sheet1").Range("C" & i) > Worksheets("Sheet3").Range("A2") Then Worksheets("Sheet1").Rows(i).Copy Worksheets("Sheet2").Range("A" & Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1) End If Next End Sub