2017-10-01 16 views
1

ストリングを変数として保存し、複数のループを使用して各ワークシートの各列を自動フィルター処理し、内部のストリングを含むすべての行を削除するそれ。ループスローステップスローで動作しますが、自動実行で失敗します

マクロをステップ実行するためにF8を押すと、マクロが終了するまですべてがうまくいくように見えます。しかし、私はちょうど実行ボタンを押してしようとすると、それは私がマクロを配置したい最初のセルを選択しているタブでのみ動作します。

違いがあれば、Excel 2016を実行していますか?

Sub Delete_Selection() 

Dim Selection As Range 
Dim Search As String 
Dim ColumnCount As Long 
Dim WS As Worksheet 
Dim J As Integer 

Set Selection = ActiveCell 
Search = Selection 

For i = 1 To Sheets.Count 
    With Sheets(i) 
     .AutoFilterMode = False 
     Set WS = ActiveSheet 
     ColumnCount = WS.Cells(2, WS.Columns.Count).End(xlToLeft).Column 

     With .Range("A1").CurrentRegion 
      For J = 1 To ColumnCount 
       On Error Resume Next 
       .AutoFilter J, Search 
       .Offset(1).SpecialCells(12).EntireRow.Delete 
       ActiveSheet.ShowAllData 

       On Error GoTo 0 
      Next J 
     End With 
     .AutoFilterMode = False 

    End With 
Next i 

End Sub 

乾杯、

+0

実際にループ内に 'ActiveSheet.ShowAllData'が必要ですか? –

+1

アクティブなワークシート内のセルを選択しますが、各セルでセルを選択せず​​に他のワークシートをループします。 セット選択= ActiveCellの 検索を削除=選択 と.Range(「A1」)で 後に各ワークシート内の何かに変数を検索し設定。CurrentRegion – peakpeak

答えて

1

任意の列にその値を持つ行を削除、あなたが値を持つセルを選択し、ワークシートのすべてをループにしたいようです。

Option Explicit 

Sub Delete_Selection() 

    Dim srch As String 
    Dim i As Long, j As Long 

    srch = ActiveCell.Value2 

    For i = 1 To Worksheets.Count 
     With Worksheets(i) 
      If .AutoFilterMode Then .AutoFilterMode = False 
      With .Range("A1").CurrentRegion 
       For j = 1 To .Columns.Count 
        .AutoFilter field:=j, Criteria1:=srch 
        With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) 
         If CBool(Application.Subtotal(103, .Cells)) Then 
          .EntireRow.Delete 
         End If 
        End With 
        .AutoFilter field:=j 
       Next j 
      End With 
      .AutoFilterMode = False 
     End With 
    Next i 

End Sub 
+0

魔法のように動作することをどうもありがとうございました!問題が解決しました! –