2017-04-10 121 views
0

我有代碼讓我做或者我想要做的。我想創建代碼:基於特定單元格值刪除行的宏,然後刪除特定列單元格下的空行

  1. 查找「NONE」列「S」,並刪除該行,並
  2. 然後刪除其下的所有行,直到它運行到該行的下一個人口稠密的小區,但繼續搜索「S」列的其餘部分以獲得更多「無」。

這裏是我到目前爲止,但之前或.Rows(i).Delete後加入另一IF問題,或者可以說,它是

Sub Helmetpractice() 
Const TEST_COLUMN As String = "S" 
Dim Lastrow As Long 
Dim i As Long 
Application.ScreenUpdating = False 

With ActiveSheet 

    Lastrow = .Cells(.Rows.Count, TEST_COLUMN).End(xlUp).Row 
    For i = Lastrow To 1 Step -1 

     If Cells(i, TEST_COLUMN).Value2 Like "NONE" Then 
      'this is where I am having trouble for the blank row delete 
      .Rows(i).Delete 
     End If 
    Next i 
End With 

Application.ScreenUpdating = True 
End Sub 

enter image description here

+0

你可以張貼一些示例數據和數據應該是什麼宏觀運行後像一個例子嗎? –

+1

所以你的數據有一堆空白的行穿插?當你循環時,你是否可以檢查「NONE」和空白行,並在兩種情況下刪除?你可以使用If Application.CountA(.Cells(i,TEST_COLUMN).EntireRow)= 0然後檢查是否有空行。 – rryanp

+0

我剛剛發佈了電子表格片段的圖片。基本上是想刪除「NONE」行本身,刪除下面的空白行,直到它運行到S列中的下一個填充單元格,並繼續直到結束。我希望「HELMET」下面的空白行保留,只需要刪除「NONE」下的空白行。最後,只有具有「HELMET」和空白的灰色單元應該保留。實際的電子表格有1000行。 –

回答

0

到現有的代碼最簡單的修改是隻需設置一個變量,指定要刪除的最後一行,然後每當找到「NONE」時,將所有內容從「NONE」行刪除到「最後一行」。

Sub Helmetpractice() 
    Const TEST_COLUMN As String = "S" 
    Dim Lastrow As Long 
    Dim EndRow As Long 
    Dim i As Long 
    Application.ScreenUpdating = False 

    With ActiveSheet 

     Lastrow = .Cells(.Rows.Count, TEST_COLUMN).End(xlUp).Row 
     EndRow = Lastrow 
     For i = Lastrow To 1 Step -1 
      If .Cells(i, TEST_COLUMN).Value2 Like "NONE" Then 
       'Cell contains "NONE" - delete appropriate range 
       .Rows(i & ":" & EndRow).Delete 
       'New end of range is the row before the one we just deleted 
       EndRow = i - 1 
      ElseIf Not IsEmpty(.Cells(i, TEST_COLUMN).Value) Then 
       'Cell does not contain "NONE" - set end of range to be the previous row 
       EndRow = i - 1 
      End If 
     Next i 
    End With 

    Application.ScreenUpdating = True 
End Sub 
+0

這非常令人驚訝!謝謝YowE3K,大幫忙 –

0

你可以使用自動篩選和SpecialCells

Sub Helmetpractice() 
    Const TEST_COLUMN As String = "S" 
    Dim iArea As Long 
    Dim filtRng As Range 

    Application.ScreenUpdating = False 

    With Range(Cells(1,TEST_COLUMN), Cells(Rows.Count, TEST_COLUMN).End(xlUp)) 
     .AutoFilter Field:=1, Criteria:="" 
     Set filtRng = . SpecialCells(xlCellTypeBlanks) 
     .Parent.AutoFilterMode = False 
     If .Cells(1,1)= "NONE" Then .Cells(1,1).EntireRow.Delete 
    End With 
    With filtRng 
     For iArea = .Areas.Count to 1 Step - 1 
      With .Areas(iArea) 
       If .Cells(1,1).Offset(-1) = "NONE" Then .Offset(-1).Resize(.Rows.Count + 1).EntireRow.Delete 
      End With 
     Next 
    End With 
    Application.ScreenUpdating = True 
End Sub 
+0

@AlexBadilla,你試過這段代碼嗎? – user3598756

+0

我現在就試試吧;我會在幾個回覆你 –

相關問題