使用Excel中的VBA删除搜索下方的内容

时间:2015-04-02 09:09:34

标签: excel vba find cell

我正在尝试使用宏来删除excel中某个单词/短语之后的数据。

问题是单元格位置可能会有所不同,具体取决于报表运行/导出后电子表格中有多少行。如果可能的话,我需要一个解决方案来定位某个短语(使用我认为的查找功能)并从文本可能的任何地方删除30个单元格(没有cet单元格)。

这可能吗?

1 个答案:

答案 0 :(得分:0)

这是可能的,但你想要的具体细节并不是最清楚的。这里有一些代码可以帮助您入门。它在工作表上的所有单元格中查找给定的短语。如果找到它,它会将该单元下面的30个单元格添加到一个预定要删除的组中。一旦它搜索了所有单元格,它就会删除收集的组。

由于我们正在迭代我们要删除的集合,因此我收集要删除的单元格(使用Union)并在循环关闭后删除它们。

这可能不是最快的代码,因为它搜索UsedRange中的所有单元格,但它应该适用于大多数用途。

Sub deleteBelowPhrase()

    Dim cell As Range
    Dim sht As Worksheet

    Dim phrase As String
    Dim deleteRows As Integer

    'these are the parameters
    phrase = "DELETE BELOW ME"
    deleteRows = 30

    'assumes you are searching the active sheet
    Set sht = ActiveSheet

    Dim del_range As Range
    Dim del_cell As Range

    For Each cell In sht.UsedRange

        'check for the phrase in the cell
        If InStr(cell.Value2, phrase) > 0 Then

            'get a reference to the range to delete
            Set del_cell = sht.Range(cell.Offset(1), cell.Offset(deleteRows))

            'create object to delete or add to existing
            If del_range Is Nothing Then
                Set del_range = del_cell
            Else
                Set del_range = Union(del_range, del_cell)
            End If
        End If

    Next cell

    'delete the block of cells that are collected
    del_range.Delete xlShiftUp

End Sub

之前

before

之后

after