在 Excel 中删除之前删除的行之间的行
Posted
技术标签:
【中文标题】在 Excel 中删除之前删除的行之间的行【英文标题】:Removing rows between earlier removed rows in Excel 【发布时间】:2014-05-22 18:46:20 【问题描述】:我要编写 VBA 代码来删除某些行(列中包含某些单词)。我有一个在下面。我在删除两个较早删除的行(小计)之间的所有行时遇到问题(*并且作为条件,这只是它们之间的一行,如果更多不删除它们)
请问有没有办法解决这个问题? 请让我知道这个问题是否含糊(因为我是新手)
Sub DeleteRows()
Dim c As Range
Dim SrchRng As Range
Dim SrchStr As String
Set SrchRng = ActiveSheet.Range("F1", ActiveSheet.Range("F10000").End(xlUp))
SrchStr = InputBox("Please Enter A Search String")
Do
Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
If Not c Is Nothing Then c.EntireRow.Delete
Loop While Not c Is Nothing
End Sub
【问题讨论】:
建议在您的问题上添加逗号,因为它很难阅读,更不用说理解问题了。 如果我输入“XYZ”,现有代码将删除 F 列中包含“XYZ”的每一行。但您的问题似乎与此代码无关。早些时候您删除了两行。让我们将这些行称为 N 和 M。N 和 M 以下的行将向上移动以填补空白。您现在要么想要删除 N 和 M 之间的行,要么正在删除它们并且您不希望它们被删除。宏如何知道 N amd M 的值?我假设 N amd M 之间的行会因为新的删除而移动。宏如何知道原始 N 和 M 之间的行的新位置? 谢谢,好点子。我只是想知道是否有一种方法可以在删除行之前检测要删除哪些行,并在其中两个之间直接只有一行时(因为有小计)而不是在删除之后添加删除行 但我现在觉得它很复杂所以我想我只能用自动过滤器来做这个 【参考方案1】:您已经获得了感兴趣的列(在本例中为 F),并且您还提示用户指定要删除的字符串,这听起来像是巧妙使用 Range.Autofilter
方法的完美秘诀。 (这是一个 MSDN 链接:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.autofilter(VS.80).aspx)
假设你正在操作的数据块来自 A:F,你可以这样写:
Option Explicit
Sub DeleteRowsWithAutoFilter()
Dim DataRng As Range, DeleteMe As Range
Dim SrchStr As String
'set references up-front
Set DataRng = ActiveSheet.Range("A1", ActiveSheet.Range("F10000").End(xlUp))
SrchStr = InputBox("Please Enter A Search String")
'turn off alerts for delete action
Application.DisplayAlerts = False
DataRng.AutoFilter Field:=6, Criteria1:=SrchStr '<~ apply autofilter
With DataRng
Set DeleteMe = .Offset(1, 0) '<~ set the delete range
DeleteMe.Delete
End With
ActiveSheet.AutoFilterMode = False
Application.DisplayAlerts = True
End Sub
【讨论】:
嗨,这个删除了所有的行,我不知道为什么:)。谢谢 那是你的目标,对吧?上面代码中的循环遍历SrchRng
,删除在 F 列中匹配的行。我的脚本使用 .AutoFilter
简单地删除与用户输入的字符串匹配的所有行
是的,在我输入任何单词后,宏会删除除第一行和最后一行(有时还有中间的一行)之外的每一行,只有在将 InputBox 重新命名为空时,它才会删除空行。我是一个初学者,我通过使用互联网和 VBA 基础知识反复试验来做到这一点,我还不能理解很多东西 :)。可惜我不能发布一个例子。谢谢以上是关于在 Excel 中删除之前删除的行之间的行的主要内容,如果未能解决你的问题,请参考以下文章