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

时间:2014-01-28 17:56:39

标签: excel vba excel-vba

我正在尝试编写一些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

有没有人对如何提高速度或更好的方法来解决这个问题?

由于

1 个答案:

答案 0 :(得分:3)

  

有没有人对如何提高速度或更好的方法来解决这个问题?

是的,有。 删除循环中的。使用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之间