VBA要搜索多个条件,并删除不包含这些条件的列

时间:2017-05-12 08:02:49

标签: excel-vba vba excel

我已将下面的内容放在一起,但我对VBA并不熟悉,所以它显然不起作用。

Sub DeleteUneededColumn()
Dim FindString As String
Dim Rng As Range
FindString = "Type"
If Trim(FindString) <> "" Then
    With Sheets("page 1").Range("A:ZZ")
        Set Rng = .Find(What:=FindString, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Rng Is Nothing Then
            Rng.EntireColumn.Delete
        End If
    End With
End If
End Sub

根据标题,它需要找到多个条件(理想情况是基于我在A1:A3上的单元格Sheet1中输入的一些关键字),我试图让它只使用一个但不是喜悦。然后,对于page 1中不包含这些字词的每一列,请删除该列。

我理解.Find将成为其中的重要部分,但其余部分则不确定。

1 个答案:

答案 0 :(得分:1)

Find返回第一次出现的范围,其中找到了字符串,并且您正在搜索整个范围。

我修改了你的代码,使其逐列,并收集所有未找到字符串的列,然后删除该范围。

Sub DeleteUneededColumn()

Dim FindString As String
Dim Rng As Range

FindString = "C"

Dim rngCol As Range, rngDelete As Range

For Each rngCol In Range("A:ZZ").Columns
    Set Rng = rngCol.Find(What:=FindString, _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
    If Rng Is Nothing Then
        If rngDelete Is Nothing Then
            Set rngDelete = rngCol
        Else
            Set rngDelete = Union(rngDelete, rngCol)
        End If
    End If

Next

rngDelete.Delete

End Sub