通过基本macros过滤掉原始数据报告

我正在尝试进行详细的过滤和删除,每天处理原始数据报告时要做的事情,并尽可能减lessfilter的数量,因为我只需点击一下button即可。

我相信我通过一个简单的录制的macros(见下面)完成了大部分工作,但是有时候我会删除某些项目。 看看代码,我相信这可能是因为macros正在应用filter时,它试图删除内容时寻找的起始行不固定。 所以我的问题是,我应该只使用基于当前持有filter的行的偏移​​值? 或者这样做不行?

当我删除标准“POR”“<> BGR”和“= Sunrise Earth”时,问题就出现了。我认为这是因为这些命令后面的select函数有一个variables行号,可能并不总是正确的

Sub ProgMisr() ' ' ProgMisr Macro ' ' Keyboard Shortcut: Ctrl+Shift+M ' Columns("A:A").Select Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 2 Range("I:I,K:K,L:L").Select Range("L1").Activate Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 1 Range("B6").Select Selection.AutoFilter ActiveSheet.Range("$A$6:$I$5761").AutoFilter Field:=2, Criteria1:="<>EHD*" _ , Operator:=xlAnd, Criteria2:="<>ESD*" Rows("7:7").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$1412").AutoFilter Field:=2 Range("F3").Select ActiveSheet.Range("$A$6:$I$1412").AutoFilter Field:=6, Criteria1:=Array( _ "Missing Audio", "Missing Audio/Subs", "Missing Subs"), Operator:= _ xlFilterValues ActiveSheet.Range("$A$6:$I$1412").AutoFilter Field:=3, Criteria1:="=DCBU", _ Operator:=xlOr, Criteria2:="=TLBA" ActiveSheet.Range("$A$6:$I$1412").AutoFilter Field:=7, Criteria1:="=" Rows("13:13").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$1069").AutoFilter Field:=7 Range("H1").Select ActiveSheet.Range("$A$6:$I$1069").AutoFilter Field:=8, Criteria1:="<>*BGR*" _ , Operator:=xlAnd Rows("66:66").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$1059").AutoFilter Field:=8 ActiveSheet.Range("$A$6:$I$1059").AutoFilter Field:=3 ActiveSheet.Range("$A$6:$I$1059").AutoFilter Field:=7, Criteria1:="POR" Rows("12:12").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$809").AutoFilter Field:=7 ActiveSheet.Range("$A$6:$I$809").AutoFilter Field:=6, Criteria1:= _ "Missing Subs" Rows("7:7").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$133").AutoFilter Field:=6, Criteria1:= _ "=Missing Audio", Operator:=xlOr, Criteria2:="=Missing Audio/Subs" Range("F2").Select ActiveSheet.Range("$A$6:$I$133").AutoFilter Field:=1, Criteria1:= _ "=*Sunrise Earth*", Operator:=xlAnd Rows("17:17").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$112").AutoFilter Field:=1 ActiveSheet.Range("$A$6:$I$112").AutoFilter Field:=7, Criteria1:="ENG" ActiveSheet.Range("$A$6:$I$112").AutoFilter Field:=3, Criteria1:=Array( _ "AHPL", "APPL", "CIPO", "DPOL", "IDPL", "SCPO", "TLPO", "WOIT"), Operator:=xlFilterValues Rows("7:7").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$55").AutoFilter Field:=3 Range("B11").Select End Sub 

编辑:新的macros代码

 Sub ProgMisr() ' ' ProgMisr Macro ' ' Keyboard Shortcut: Ctrl+Shift+M ' Columns("A:A").Select Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 2 Range("I:I,K:K,L:L").Select Range("L1").Activate Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 1 LastRow = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row Range("B6").Select Selection.AutoFilter ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=2, Criteria1:="<>EHD*" _ , Operator:=xlAnd, Criteria2:="<>ESD*" VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=2 Range("F3").Select ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=6, Criteria1:=Array( _ "Missing Audio", "Missing Audio/Subs", "Missing Subs"), Operator:= _ xlFilterValues ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=3, Criteria1:="=DCBU", _ Operator:=xlOr, Criteria2:="=TLBA" ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=7, Criteria1:="=" VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=7 Range("H1").Select ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=8, Criteria1:="<>*BGR*" _ , Operator:=xlAnd VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$ & LastRow").AutoFilter Field:=8 ActiveSheet.Range("$A$6:$I$ & LastRow").AutoFilter Field:=3 ActiveSheet.Range("$A$6:$I$ & LastRow").AutoFilter Field:=7, Criteria1:="POR" VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$ & LastRow").AutoFilter Field:=7 ActiveSheet.Range("$A$6:$I$ & LastRow").AutoFilter Field:=6, Criteria1:= _ "Missing Subs" VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=6, Criteria1:= _ "=Missing Audio", Operator:=xlOr, Criteria2:="=Missing Audio/Subs" Range("F2").Select ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=1, Criteria1:= _ "=*Sunrise Earth*", Operator:=xlAnd VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=1 ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=7, Criteria1:="ENG" ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=3, Criteria1:=Array( _ "AHPL", "APPL", "CIPO", "DPOL", "IDPL", "SCPO", "TLPO", "WOIT"), Operator:=xlFilterValues VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=3 Range("B11").Select End Sub 

编辑2:

 Sub ProgMisr() ' ' ProgMisr Macro ' ' Keyboard Shortcut: Ctrl+Shift+M ' Columns("A:A").Select Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 2 Range("I:I,K:K,L:L").Select Range("L1").Activate Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 1 LastRow = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row Range("B6").Select Selection.AutoFilter ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=2, Criteria1:="<>EHD*" _ , Operator:=xlAnd, Criteria2:="<>ESD*" VisibleCell = Range("A7:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row Rows(VisibleCell & ":" & VisibleCell).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=2 Range("F3").Select ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=6, Criteria1:=Array( _ "Missing Audio", "Missing Audio/Subs", "Missing Subs"), Operator:= _ xlFilterValues ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=3, Criteria1:="=DCBU", _ Operator:=xlOr, Criteria2:="=TLBA" ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=7, Criteria1:="=" VisibleCell = Range("A7:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row Rows(VisibleCell & ":" & VisibleCell).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=7 Range("H1").Select ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=8, Criteria1:="<>*BGR*" _ , Operator:=xlAnd VisibleCell = Range("A7:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row Rows(VisibleCell & ":" & VisibleCell).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=8 ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=3 ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=7, Criteria1:="POR" VisibleCell = Range("A7:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row Rows(VisibleCell & ":" & VisibleCell).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=7 ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=6, Criteria1:= _ "Missing Subs" VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row Rows(VisibleCell & ":" & VisibleCell).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=6, Criteria1:= _ "=Missing Audio", Operator:=xlOr, Criteria2:="=Missing Audio/Subs" Range("F2").Select ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=1, Criteria1:= _ "=*Sunrise Earth*", Operator:=xlAnd VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row Rows(VisibleCell & ":" & VisibleCell).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=1 ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=7, Criteria1:="ENG" ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=3, Criteria1:=Array( _ "AHPL", "APPL", "CIPO", "DPOL", "IDPL", "SCPO", "TLPO", "WOIT"), Operator:=xlFilterValues VisibleCell = Range("A2:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row Rows(VisibleCell & ":" & VisibleCell).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter Field:=3 Range("B11").Select End Sub 

一切正常,你应该参数化来过滤要删除的数据的范围和数据范围。

而不是使用ActiveSheet.Range("$A$6:$I$5761").AutoFilterActiveSheet.Range("$A$6:$I$1412").AutoFilter …你可以先计算出所有数据的最后一行,例如LastRow = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row (在使用第一个AutoFilter之前)。 现在你可以像这样补充它们: ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter +你的参数为每个自动ActiveSheet.Range("$A$6:$I$" & LastRow).AutoFilter

使用AutoFilter后,您匹配所选数据的第一行,并select所有数据:

 Rows("7:7").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp 

请注意,每个自动筛选行号可能不同。 你可以用它来计算第一行:

 Set VisibleCell = Range("A6:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1) RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp 

我希望能帮助你解决这个问题。

编辑 – insted:

 Set VisibleCell = Range("A7:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1) RowsToSelect = VisibleCell.Row Rows(RowsToSelect & ":" & RowsToSelect).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp 

您可以使用:

 VisibleCell = Range("A7:I" & LastRow + 1).SpecialCells(xlCellTypeVisible).Cells(1).Row Rows(VisibleCell & ":" & VisibleCell).Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp 

Ist更短:)

仍然不是很明白你在拍什么,但是你想尝试下面的代码,看看它是否对你有用吗?

我build议你在运行代码之前制作一份表格副本,以防万一你想做一些改动。

 Sub Delete_Data_Test() 'array of which data you want to delete DaleteArray = Array("EHD", "ESD", "DCBU", "TLBA", "BGR", "POR", "Missing Audio", "Missing Audio/Subs", "Missing Subs", "Sunrise Earth", "AHPL", "APPL", "CIPO", "DPOL", "IDPL", "SCPO", "TLPO", "WOIT") 'for each individual in the Deleting Array For Each Word In DeleteArray 'find word to delete in column A Set findWord = Range("A:A").Find _ (what:=(Word), LookIn:=xlValues) 'find the last row in the Worksheet Set findLastrow = Range("A:A").Find _ ("*", After:=Cells(1, 1), SearchDirection:=xlPrevious) 'while there is a Word on column A that needs deleting Do While Not findWord Is Nothing 'double check the value If Cells(findWord.Row, 1).Value = Word Then 'delete entire row that contains the word in column A Row(findWord.Row).Delete Shift:=xlUp Else 'find the next time the word appears Set findtext = Range("F" & findWord.Row & ":F" & findLastrow.Row).Find _ (what:=(Word), LookIn:=xlValues) End If Loop Next End Sub 

检查一下,看看你是否需要或者需要重新调整。

顺便说一句,你应该看看其中的一些,以便更熟悉VBA。