如果单元格在VBA / Excel中包含特定值,如何从范围中删除列

我试图写一点VBA,它将检查一列中的单元格的值(行M到GD),如果单元格不包含“YY”删除列。

要检查的单元总是在第22行

我已经尝试了以下方法,但是速度很慢。

w = 186 Do If Worksheets(“SOF”).Cells(22, w).Formula = "YY" Then w = w - 1 Else Worksheets(“SOF”).Cells(22, w).EntireColumn.Delete End If w = w - 1 Loop Until w < 13 

有没有人有任何build议如何加快或更好的方法来解决这个问题?

谢谢

有没有人有任何build议如何加快或更好的方法来解决这个问题?

是的。 不要删除循环中的列。 使用Union方法。 这是一个例子。 我已经评论了代码,所以你不会理解它的问题。 如果你这样做,然后只是回发。

 Option Explicit Sub Sample() Dim ws As Worksheet Dim i As Long Dim delRange As Range '~~> Set this to the relevant worksheet Set ws = ThisWorkbook.Sheets("SOF") With ws '~~> Loop through relevant columns For i = 13 To 186 '~~> Check if the value is equal to YY If UCase(Trim(.Cells(22, i).Value)) = "YY" Then '~~> Store the Range to delete later If delRange Is Nothing Then Set delRange = .Columns(i) Else Set delRange = Union(delRange, .Columns(i)) End If End If Next i End With '~~> Delete the relevant columns in one go If Not delRange Is Nothing Then delRange.Delete End Sub 

这将在一眨眼的时间执行,但如果你想,你可以夹在Application.ScreenUpdating = FalseApplication.ScreenUpdating = True之间的代码