【问题标题】:How to delete all row which contains "Grand Total" in Excel automatically?如何自动删除Excel中包含“总计”的所有行?
【发布时间】:2012-11-29 15:39:41
【问题描述】:

在名为“报告”的活动工作表中,我有 2 列 I 和 F。

它有包含文本“Grand Total”的重复单元格。

如果整行自动包含总计,我想删除它。

VBA 代码会很好。

【问题讨论】:

  • 您可以手动执行此操作,也可以使用 AutoFilter 的代码执行此操作。明智的编码AutoFilter 比循环遍历范围要快得多

标签: vba excel


【解决方案1】:

使用以下VBA代码,可以快速删除具有特定单元格值的行,请按以下步骤操作:

  1. 选择要删除特定行的范围。

  2. 点击Developer>Visual Basic,会弹出一个新的Microsoft Visual Basic for applications窗口,点击Insert > Module,在Module中输入以下代码:

    根据单元格值(即总计)删除整行的 VBA 代码:

    Sub Delete_Rows()
        Dim rng As Range, cell As Range, del As Range
        Set rng = Intersect(Range("A1:D22"), ActiveSheet.UsedRange)
        For Each cell In rng
        If (cell.Value) = "Grand Total" _
        Then
        If del Is Nothing Then
        Set del = cell
        Else: Set del = Union(del, cell)
        End If
        End If
        Next cell
        On Error Resume Next
        del.EntireRow.Delete
        End Sub
    
  3. 然后点击“Play/Run”按钮运行代码,具有一定值的行已被删除。

(注意:如果您在 Excel 中看不到“开发人员”选项卡,请执行以下步骤:1)单击“Office”按钮,然后单击“Excel 选项”。 2) 在“流行”类别中,在“使用 Excel 的热门选项”下,选中“功能区”复选框中的“显示开发人员”选项卡,然后单击“确定”。)

【讨论】:

  • 此代码在 A1:D22 上运行 - 这与问题有什么关系?
  • @brettdj Intersect Range 方法返回一个 Range 对象,表示范围的交集。 (A1:D22) 只是一个参考,代码 'Intersect(Range("A1:D22"), ActiveSheet.UsedRange)' 将选择 A1:D22 和用户选择的交集
  • @TheNoble-Coder 是的,我了解Intersect。我的观点是 OP 示例适用于 F 列和 I 列,为什么要使用在不同范围的已用部分上运行的代码?顺便说一句,ActiveSheet.UsedRange 不是用户选择。
【解决方案2】:

使用AutoFilter 非常有效。这也可以在没有VBA 的情况下完成(即手动)

主副

Sub Main()
Dim ws As Worksheet
Dim rng1 As Range
Dim StrIn As String
Dim rng2  As Range
Set ws = Sheets("Sheet1")
Application.ScreenUpdating = False
Set rng1 = ws.Range("F:F,I:I")
StrIn = "Grand Total"
For Each rng2 In rng1.Columns
Call FilterCull(rng2, StrIn)
Next
Application.ScreenUpdating = True
End Sub

删除子

Sub FilterCull(ByVal rng2, ByVal StrIn)
With rng2
    .Parent.AutoFilterMode = False
    .AutoFilter Field:=1, Criteria1:=StrIn
   .EntireRow.Delete
    .Parent.AutoFilterMode = False
    End With
End Sub

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多