2017-08-03 89 views
2

我在网上找到了这个VBA代码。该代码旨在查找特定文本“Item”,然后删除具有文本“Item”的单元格及其下面的单元格。代码一次只能运行一个。我正在处理的列有11,000个数据单元。一次只能做一件事情会花太长的时间。有没有人知道一种方法来接受这段代码,并使其在整个列中运行一次?这是代码。Excel VBA - 通过列重复宏

Sub deleteCells() 
' 
' deleteCells Macro 
' 
' Keyboard Shortcut: Ctrl+s 
' 
Dim StartRange As String 
Dim EndRange As String 
Cells.Find(What:="Item").Select 
StartRange = ActiveCell.Address 
Selection.Offset(1, 1).Select 
EndRange = ActiveCell.Address 
ActiveSheet.Range(StartRange & ":" & EndRange).Select 
Selection.Delete Shift:=xlUp 

End Sub 

在此先感谢!

+0

你有没有试过一个循环 - 甚至寻找任何一个例子? – pnuts

+0

我做了,我尝试了一些变化,但我无法按照我想要的方式让它工作。在编码方面我还有很多东西需要学习。 –

+0

它有助于发布至少一次尝试(如果合适的话,错误消息和位置)。 – pnuts

回答

0

您正在删除使用.address查找的单元格,以查找第一个查找不起作用。只要继续寻找商品,直到你找不到它。

Option Explicit 

Sub deleteCells() 
    Dim rng As Range, str As String 

    On Error Resume Next 
    str = "Item" 
    With Worksheets("sheet1") 
     Set rng = .Cells.Find(str) 
     Do While Not rng Is Nothing 
      rng.Resize(2, 2).Delete Shift:=xlUp 
      Set rng = .Cells.Find(str) 
     Loop 
    End With 

End Sub 

您应该将更多的参数应用于.Find操作。 VBA的.Find与工作表中的相同,并会继承用户使用的选项(又称参数)。

您还应该限制.Cells到您想要使用的列。你认为这并不重要,不能包含在你的问题中,所以你可以把这部分弄清楚。

+0

谢谢,我很欣赏这种回应。有用。我不太了解代码。我打算继续学习。谢谢回答我的问题。 –