Vba Excel宏查找文本并从中选择下一行
我需要一个宏来查找此文本: “XYZ”和“*报告” 然后选择从XYZ到*报告的行,并删除包括所选内容在内的所有行 我已经做到了:Vba Excel宏查找文本并从中选择下一行,vba,excel,Vba,Excel,我需要一个宏来查找此文本: “XYZ”和“*报告” 然后选择从XYZ到*报告的行,并删除包括所选内容在内的所有行 我已经做到了: Sub DelWordsCol() Dim c As Range Dim d As Range Dim SrchRng Set SrchRng = ActiveSheet.Range("A1", ActiveSheet.Range("A65536").End(xlUp) Do set c=SrchRng.Fin
Sub DelWordsCol()
Dim c As Range
Dim d As Range
Dim SrchRng
Set SrchRng = ActiveSheet.Range("A1", ActiveSheet.Range("A65536").End(xlUp)
Do
set c=SrchRng.Find("XYZ", LookIn:=xlValues)
if not c Is Nothing Then c.EntireRow.Delete
Loop while Not c Is Nothing
Do
set d=SrchRng.Find("*Report", LookIn:=xlValues)
if not d Is Nothing Then d.EntireRow.Delete
Loop while Not c Is Nothing
End Sub
'我不能使用resize,因为从“XYZ”到“*.Report”的行数可以是8或9或任何值。
'我可以删除特定行,但不能删除从“XYZ”到“*Report”的范围。您的代码不清楚您是否正在查找部分匹配项
Sub DelWordsCol()
Dim c As Long, d As Long
Dim strA As String, strB As String
strA = "XYZ"
strB = "Report"
With Worksheets("Sheet4") '<~~ set this worksheet reference properly!
With Intersect(.Columns(1), .UsedRange)
'shift one row down off the header row
With .resize(.rows.count - 1, 1).offset(1, 0)
Do While Not IsError(Application.Match(strA, .Cells, 0))
c = Application.Match(strA, .Cells, 0)
If Not IsError(Application.Match(strB, .Cells.Offset(c, 0), 0)) Then
d = Application.Match(strB, .Cells.Offset(c, 0), 0)
.Cells(c, 1).Resize(d + 1, 1).EntireRow.Delete
Else
Exit Do
End If
Loop
End With
End With
End With
End Sub
Sub-DelWordsCol()
尺寸c等于长,d等于长
作为字符串的Dim strA,作为字符串的strB
strA=“XYZ”
strB=“报告”
使用工作表(“Sheet4”)”如果已确定c和d,则只需使用这两个单元格来定义和删除范围:
Option Explicit
Sub DelRange()
Dim c As Range
Dim d As Range
Const lSrchCol As Long = 1 'searching column A
With ActiveSheet.Columns(lSrchCol)
Set c = .Find(what:="XYZ", LookIn:=xlValues)
Set d = .Find(what:="*Report", LookIn:=xlValues)
End With
If Not c Is Nothing And Not d Is Nothing Then _
Range(c, d).EntireRow.Delete
End Sub
如果列中可能有多个XYZ和报表对,则可能需要使用.Find中的一些其他可选参数以增强稳健性
如果有多对,那么您可能需要指定起点,并设置Do。。。循环,当c和d为空时退出
如果有可能在报告之后出现第一个XYZ,您可能还需要检查以确保它们的顺序正确,否则将删除错误的行。感谢Ron的帮助,但范围在我的数据之间。所以我不能用这个。有人回答了。感谢堆,宏在列A中找到包含XYZ的行;然后是包含报表的下一行;并从下一行中删除所有行,包括下一行。这不是你想要的吗?我的错误应该说清楚。抱歉,新加入论坛。这些是将报表转换为excel后产生的标题。如;单元格A1有“XYZ”单元格A7有“报告”(垃圾)。然后是A8:A15表(良好数据)。A16:A22垃圾数据。等等。。我必须找到从“XYZ”到“Report”之间的行。删除,然后转到下一步。不过非常感谢。现在我有了代码,只是我需要宏离开搜索的第一个实例。然后开始宏。天哪,你是最棒的。在这上面花了很多时间。太完美了。谢谢你!!你能帮我做一件事吗。如果找到XYZ的第一个实例,则转到下一个范围并启动宏。可以让宏忽略找到“XYZ”的第一个实例并转到下一个实例,然后执行宏吗?您应该能够在循环中放置变量类型为long
的计数器。到目前为止,您尝试了什么?我使用了您的宏原样并有效。因此,strA和StrB设置正确,并且删除它们之间的行。但是我没有头球。因此,宏应该忽略StrA和strB的第一个实例。然后做宏。好的,我想我现在明白了。我将工作区域向下移动了一行以保留标题。