如何删除特殊行

时间:2015-03-16 19:01:34

标签: excel vba excel-vba

在sheet1中我有一个单元格A3(52):

Screenshot 1

在表格2中,我想删除表格中有A3数量的行。这个数字只能在第一列。

Screenshot 2

这是我的代码,但它不起作用:

Sub delete_ligne()

Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To 6600

    If (Cells(i,1) = ThisWorkbook.Sheets("Modification").Range("B7").Value)

    Then
    Cells(i, 1).EntireRow.Delete
    i = i - 1
    End If
Next
Application.ScreenUpdating = True
End Sub

任何解决方案?

3 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题;

Dim wbThis As Workbook
Dim wsThis As Worksheet
Dim wsTarget As Worksheet
Dim tmp As Integer

Sub delete_ligne()
    Set wbThis = ActiveWorkbook
    Set wsThis = wbThis.Sheets(1)
    Set wsTarget = wbThis.Sheets(2)



    For i=1 To 100      
        wsThis.Activate
        tmp = wsThis.Cells(3, i).Value
        For j=3 To 100
            wsTarget.Activate
            If Cells(j,1).Value = tmp Then
                Cells(j,1).EntireRow.Delete
            End If
        Next j
    Next i
End Sub

第一圈(i):
First For循环遍历Sheet 1的单元格。它从A3开始直到A100。您可以调整代码中的值。

第二圈(j):
对于第一循环的每个元素,Second For循环遍历Sheet 2的单元格。如果有任何值,则完全删除该行。

答案 1 :(得分:0)

仍然不确定"它不起作用"意思是,但这可能会有所帮助:

Sub delete_ligne()
Dim rng as Range
Dim WB as Workbook
Dim i As Integer

  Application.ScreenUpdating = False
  Set WB = 'define your workbook here
  Set rng = WB.Sheet(2).Range("B:B").Find (What:=WB.Sheet(1).Range("A3"), _
          LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
  While not Rng is Nothing
    rng.Rows(1).EntireRow.Delete
    Set rng = WB.Sheet(2).Range("B:B").Find (What:=WB.Sheet(1).Range("A3"), _
              LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
  Wend

  Application.ScreenUpdating = True
End Sub

根据需要调整以定义WBSheet(2)Sheet(1)以指向正确的位置。

.Find将比循环6600行快得多,并且不关心它找到/删除行的顺序。

如果有更多要检查的单元格为"A3"

,则可以添加外部循环

答案 2 :(得分:0)

这样的事情应该有用...... 只需仔细检查哪个单元格实际上具有您的价值作为您的代码并且问题不同意。

Sub delete_ligne()
    Dim i As Integer
    Application.ScreenUpdating = False
    For i = 6600 To 1 Step -1
        If Cells(i,1) = ThisWorkbook.Sheets("Modification").Range("A3").Value Then
            Rows(i).EntireRow.Delete
        End If
    Next i
    Application.ScreenUpdating = True
End Sub