gpt4 book ai didi

excel - 循环查找函数并执行删除列操作,直到查找函数返回 0

转载 作者:行者123 更新时间:2023-12-04 22:13:24 25 4
gpt4 key购买 nike

我正在向报告中添加功能,其中一些列将输出一个包含“删除我”的单元格。
我希望在宏中循环查找函数以查找“删除我”,然后删除整个列。
目前,“删除我”最多会有三个实例,所以我循环了 3 次。
当有 'Delete Me' 的三个实例时,下面的 Sub 工作正常,但是当少于三个时,我收到一条错误消息:“运行时错误 '91':对象变量或未设置 block 变量”

Sub Test()

Dim i As Integer

For i = 1 to 3

Cells.Find(What:="Delete Me", After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Selection.EntireColumn.Delete

Next i

End Sub
我想做的是循环直到 find 函数没有找到“删除我”,然后退出 Sub。

最佳答案

删除包含条件的列

  • 通常,Find 的组合和 FindNext在这种情况下使用。
  • 将找到的单元格组合到一个范围中,然后一次性删除该范围的整个列可能也会更有效。
  • 请注意 xlPart意味着它也会删除aaa delete me aaa反对xlWhole这不会被删除。

  • Option Explicit

    Sub DeleteColumns()

    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    Dim rg As Range: Set rg = ws.UsedRange

    Dim fCell As Range
    Set fCell = rg.Find(What:="Delete Me", _
    After:=rg.Cells(rg.Rows.Count, rg.Columns.Count), LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    Dim drg As Range

    If Not fCell Is Nothing Then
    Dim FirstCellAddress As String: FirstCellAddress = fCell.Address
    Do
    ' Combine found cells into the Delete range.
    If drg Is Nothing Then
    Set drg = fCell
    Else
    Set drg = Union(drg, fCell)
    End If
    Set fCell = rg.FindNext(After:=fCell)
    Loop Until fCell.Address = FirstCellAddress
    End If

    If drg Is Nothing Then
    MsgBox "Nothing deleted.", vbExclamation
    Else
    drg.EntireColumn.Delete
    MsgBox "Columns deleted.", vbInformation
    End If

    End Sub

    关于excel - 循环查找函数并执行删除列操作,直到查找函数返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71586696/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com