【问题标题】:Delete Row + Move up based on partial text match in a Column删除行+根据列中的部分文本匹配上移
【发布时间】:2019-02-19 15:27:30
【问题描述】:

我想要一个宏来删除A列中包含general的任何行并向上移动(以消除空白行)。

我一直在尝试,但没有成功:

Sub format()
If Worksheets("Sheet1").Range("A1:A20").Value = "general" Then
Selection.Delete Shift:=xlToUp 
End If
End Sub

【问题讨论】:

  • 我猜你还没有选择。这就是您无法删除选择的原因。尝试先选择 ;-)
  • 您也不能将整个范围与一个值进行比较。您必须遍历 A1:A20 中的每个单元格,或者使用自动过滤器或查找。

标签: vba if-statement delete-row


【解决方案1】:

这是一个使用 AutoFilter 的示例,它不需要循环。

Sub x()

Dim rData As Range

Application.ScreenUpdating = False

Range("A1").EntireRow.Insert
Range("A1:E1").Value = Array(1, 2, 3, 4,5) 'amend to how many columns you have

With ActiveSheet
    .AutoFilterMode = False
    .Range("A1").AutoFilter field:=1, Criteria1:="*General*"
    With .AutoFilter.Range
        On Error Resume Next
        Set rData = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
        If Not rData Is Nothing Then
            Application.DisplayAlerts = False
            rData.Delete
            Application.DisplayAlerts = True
        End If
    End With
    .AutoFilterMode = False
    .Rows(1).Delete
End With

Application.ScreenUpdating = True

End Sub

【讨论】:

  • 这太棒了!有用!它只是不删除包含general...的前2行数据...
  • 忘了提到自动过滤器确实需要标题行。只需在顶部插入一行并将任何内容放入其中,最后可以删除。也可以在代码中做到这一点。
  • 如果你能在我的代码中添加它,那就太好了,谢谢!我真的是这方面的初学者。
  • 非常感谢您的帮助!
猜你喜欢
  • 2012-07-04
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
相关资源
最近更新 更多