2011-10-21 11 views
2

IJ列= 0内に発行された行に基づいて行を削除するにはどうすればよいですか?

a cut down version of my spreadsheet

どのように私はJ列= 0内で公開に基づいて行を削除するか、Excelスプレッドシートに次がありますか?

行をカットして別のシートに貼り付ける方がよいでしょう。でも、削除するだけで助けてもらえればいいと思います。

+1

あなたは一度だけこれを必要とする場合は、自動フィルタを使用するのが最も簡単かもしれないと手で行をコピー/削除します。実際に自動化されたソリューションを探しているかどうかは分かりません。 –

+0

私は何をやっています。私はさまざまな製品などのExcelでINSERTステートメントを構築しています。 – PD24

+1

@ pd24にはvbaタグが付いています。私はあなたに非常に高速な方法であると答えています – niko

答えて

3

このコードは、J = 0のアクティベーションシート上の行を自動フィルタリングし、2番目のワークシートの最初の空行にコピーしてから、アクティブシートから行を削除します。

変更5枚目のなどのために、別のシートにすなわちSet ws2 = Sheets("Your Sheet Name")またはSet ws2 = Sheets(5)を行をコピーするには、このラインSet ws2 = Sheets(2)

Sub MoveEm() 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 
    Set ws1 = ActiveSheet 
    Set ws2 = Sheets(2) 
    Dim rng1 As Range 
    Application.ScreenUpdating = False 
    With ws1 
     .AutoFilterMode = False 
     .Columns("j").AutoFilter Field:=1, Criteria1:="0" 
     With .AutoFilter.Range.Offset(1, 0).EntireRow 
     Set rng1 = ws2.Cells.Find("*", ws2.[a1], xlValues, , xlRows, xlPrevious) 
     If rng1 Is Nothing Then 
     Set rng1 = ws2.[a1] 
     Else 
     Set rng1 = ws2.Cells(rng1.Row + 1, "A") 
     End If 
      .Copy rng1 
      .Delete 
     End With 
     .AutoFilterMode = False 
    End With 
    Application.ScreenUpdating = True 
End Sub 
+0

+1は完全な答えですが、私は見つけても速いです.2000秒以内に5000行のうち1000行を削除しました。 – niko

+0

しかし、私はあなたのコードがシンプルでクリーナー好きです! – niko

+0

Findは確かに非常に速いnikoですが、多くの成功した一致に対して何度も(別のfindまたはfindnextとして)呼び出される必要があるとき、特にそれぞれの結果の後に処理があるときは効率が低下します(この場合は3つのコードDoループの内側)。私は不十分な結果を検索するためにFindを保持する傾向があります。作業列のAutoFilterが私の好むアプローチです – brettdj

3
Sub Delete_Zero_Codes() ' Deletes The Zero Codes 
    Dim rCell As Range 
    Dim strAddress As String 
Application.ScreenUpdating = False 

    With Thisworkbook.Sheets("sheetname").Columns("J") 
     Set rCell = .Find(What:=0, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns) 
     If Not rCell Is Nothing Then 
      Do 
      strAddress = rCell.Address 
      rCell.EntireRow.Delete 
      Set rCell = .FindNext(Range(strAddress)) 
      Loop Until rCell Is Nothing 
     End If 
    End With 

Application.ScreenUpdating = True 

End Sub 

これらのマクロは、J列のゼロコードを削除し、その後、私は更新されます知っている他のシートにコピーするJ列のゼロのコードが必要な場合は、他のシートに貼り付けていないこと

+0

+1 Niko。私はそれもコピーコンポーネントを行ったように私のバージョンを追加しました。見つけられる値があま​​りにも多くない場合は、Findルーチンが非常に速くなります。 – brettdj

関連する問題