【问题标题】:Loop through used cells in the reverse order以相反的顺序循环使用过的单元格
【发布时间】:2021-12-30 19:41:36
【问题描述】:

我试图使用以下代码删除 ACTIVE 表中不需要的列:

Sub DeleteUnwantedColumns()
Dim LastUsedCell As Integer
Dim deleteRange As Range
LastUsedCell = ActiveSheet.UsedRange.Columns.count
Set deleteRange = ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(1, LastUsedCell))
arr = Array("FY17", "FY18", "FY19", "FY20", "FY21")
    For Each cell In ActiveWorkbook.Worksheets("Sheet1").Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(1, LastUsedCell))
        If IsError(Application.Match(cell.Value, arr, 0)) Then
             ActiveSheet.Cells.EntireColumn.Delete
        End If
    Next
End Sub

使用此代码表正在删除数组中未提及的内容,但如果我要删除第 2 列,则第 3 列将是第 2 列,因此在这种情况下,如果值是某些东西,代码将跳过第 2 列其他在第 2 列中。

有没有办法让这段代码从最后使用的列到第一列。 我尝试使用 step-1 ,但它在代码本身中显示错误。

感谢任何帮助。

提前谢谢你

【问题讨论】:

  • Step -1 仅适用于索引循环,不适用于 For Each 循环。

标签: vba loops reverse


【解决方案1】:

使用 for 循环并使用 Step -1 从 usedRange.Columns.Count 向后退。您从未使用过 DeleteRange,所以我将其删除。

Sub DeleteUnwantedColumns()
    
    Dim arr As Variant
    Dim c As Integer
    
    arr = Array("FY17", "FY18", "FY19", "FY20", "FY21")
        
    For c = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
        If IsError(Application.Match(ActiveSheet.Cells(1, c), arr, 0)) Then
            ActiveSheet.Columns(c).Delete
            End If
        Next
        
End Sub

【讨论】:

  • 非常感谢@Chris Strickland
  • 不客气。如果这对您有帮助,请选择它作为答案。
猜你喜欢
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
相关资源
最近更新 更多