【发布时间】:2017-03-15 22:09:54
【问题描述】:
下面的代码可以修改成
- 根据列标题和单元格值删除多行,并且
- 对多列行组合执行此操作?
示例:列“状态”值“完成” 循环浏览所有工作表并查找任何标有状态的标题并删除其中状态包含完整的所有行?
Sub Delete_Rows_Based_On_Header_and_Value ()
'
' Delete_Rows_Based_On_Header_and_Value Macro
'
' Declaration
Dim a as long
Dim w as long
Dim vDELCOLs as variant
Dim vCOLNDX as variant
Dim vDELROWs as variant
Dim vROWNDX as variant
vDELCOLs = array("status","Status Name","Status Processes")
vDELROWs = array("Complete","Completed","Done")
with Activeworkbook
for w=1 to .worksheets.count
with worksheets(w)
' I know this part is to delete columns based on the column name and I am not sure how to modify it to just check column name then delete row based on the value on that column only.
for a=lbound(vdelcols) to ubound(vdelcols)
vcolndx=application.match(vdelcols(a), .rows(1), 0)
if not iserror(vcolndx) then
.columns(vcolndx).entirecolumn.delete
end if
next a
end with
next w
end with
【问题讨论】:
-
在编写更多代码之前,您需要决定是否要删除一行,如果 (a) 状态列包含“完成”或状态名称列包含“完成”或状态流程列包含“完成”,或 (b) 状态列包含“完成”且状态名称列包含“已完成”且状态流程列包含“完成”。
-
因此,对 1 个列名和 1 个单元格值执行此操作会更容易,即:状态和完成,然后是状态名称和完成的另一行,状态过程的第三行并完成对吗?这样可以简化代码和流程?
-
对于一个值稍微会更简单 - 它可以省去考虑是要所有值匹配还是要匹配任何值。但是,如果您愿意只检查一列的值,那么您可能已经决定要在 any 值匹配时删除该行。
-
它可以是 1 列的多个值?所以状态我想删除 Complete 和 Pending - 然后一旦所有这些都被删除,我可以选择 Status Name 和 Completed 和 Pending 等,所以在这种情况下,我只需要它来查找某个列,然后查找一个数组如果这些值中的任何一个存在,则删除整行? - 也可以编辑我的帖子,如果不够清楚,请见谅!