2017-04-10 8 views
0

私にはのどちらかを実行するコードがありますか、またはです。 、特定のセルの値に基づいて行を削除し、その特定の列のセルの下にある空の行を削除するマクロ

  1. が列「S」で「NONE」を検索していないと、その行を削除し、それがその行の次の人口のセルに実行されるまで
  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"の下にある空の行のみを削除します。最後に、「ヘルメット」とその下に空白がある灰色のセルだけが残ります。実際のスプレッドシートの行数は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

私は今それを試してみましょう。私はあなたに戻っていくつもりです –

関連する問題