VBA删除非指定列时出现漏删,如何倒序遍历已用列解决?
修正后的完整代码
Sub DeleteUnwantedColumns() Dim LastUsedCol As Integer Dim i As Integer Dim arr As Variant LastUsedCol = ActiveSheet.UsedRange.Columns.Count arr = Array("FY17", "FY18", "FY19", "FY20", "FY21") ' 从最后一列倒序遍历到第一列 For i = LastUsedCol To 1 Step -1 ' 判断当前列首行值不在指定数组中则删除 If IsError(Application.Match(ActiveSheet.Cells(1, i).Value, arr, 0)) Then ActiveSheet.Columns(i).EntireColumn.Delete End If Next End Sub
核心修改说明
- 遍历方式调整:放弃
For Each遍历单元格的方式,改为按列号从最大已用列向第一列倒序遍历,删除列时后续待遍历的列号不会发生偏移,不会出现漏检问题 - 修复删除逻辑:原代码
ActiveSheet.Cells.EntireColumn.Delete会删除工作表全部列,修改为仅删除当前匹配到的不符合要求的指定列 - 去掉冗余变量:删除了原代码中未使用的
deleteRange变量,同时统一使用ActiveSheet操作,避免同时引用ActiveWorkbook.Worksheets("Sheet1")和ActiveSheet可能出现的工作表不匹配问题
内容的提问来源于stack exchange,提问作者Rishwan
相关产品推荐
相关产品推荐

