2017-01-23 7 views
0

オートフィルタを作成するマクロを作成したい場合は、フィルタを削除し、ブック内の一部のタブで特定の範囲を削除します。範囲を削除し、複数のタブでオートフィルタを作成する

私はこのコードを作成しましたが、何らかの形では動作しません。データは、If文にリストされていないすべてのタブではなく、1つのタブからのみ削除されます。助けてください!上記の私のコメントに続いて

Sub ClearTabs() 

Dim rng As Range 
Dim ws As Worksheet 
Set rng = Range("B9:AK100") 

For Each ws In ThisWorkbook.Sheets 
    If ws.Name <> "lastfile" And ws.Name <> "Sheet1" And ws.Name <> "Sheet2" Then 

     If Not ws.AutoFilterMode Then 
      ws.Range("B8:AK8").AutoFilter 
     End If 
    ws.AutoFilter.ShowAllData 
    rng.ClearContents 

    End If 

Next ws 

End Sub 
+0

のように行くことができますか?また、あなたはwsループの外側にあなたのrngを設定し、内側に移動し、それを完全に修飾します。 –

答えて

1

、あなたはFor Each ws In ThisWorkbook.Sheetsループ内レンジ(Set rng = Range("B9:AK100"))を設定する必要があります。

コード

Sub ClearTabs() 

Dim rng As Range 
Dim ws As Worksheet 

For Each ws In ThisWorkbook.Sheets 
    With ws 
     Select Case .Name 
      Case "lastfile", "Sheet1", "Sheet2" 
       ' do nothing 
      Case Else 
       Set rng = .Range("B9:AK100") 

       If Not .AutoFilterMode Then 
        .Range("B8:AK8").AutoFilter 
       End If 
       .AutoFilter.ShowAllData 
       rng.ClearContents 
     End Select 
    End With 
Next ws 

End Sub 
+0

ありがとうございます!あなたの方法は機能します。どのように私がそれをやろうとしていたかとは若干異なります - 私のコードのどこに間違いがあるのか​​教えてください。 – dzmkr

+0

はい、コードの先頭にある 'Set rng = Range(" B9:AK100 ")'を 'For Each ws In ThisWorkbook.Sheets'の後の行に移動し、' Set rng = ws.Range( "B9:AK100")、このクリーナーバージョンを使用する方が好みませんか? –

+0

@dzmkrあなたの質問を解決しましたか? –

0

あなたは調光を避け、rngを設定し、これら3枚のほかに、あなたが持っているんどのように多くの枚この

Option Explicit 

Sub ClearTabs() 
    Dim ws As Worksheet 

    For Each ws In ThisWorkbook.Sheets 
     With ws 
      If .Name <> "lastfile" And .Name <> "Sheet1" And .Name <> "Sheet2" Then 
       If .AutoFilterMode Then 
        .AutoFilter.ShowAllData 
       Else 
        .Range("B8:AK8").AutoFilter 
       End If 
       .Range("B9:AK100").ClearContents 
      End If 
     End With 
    Next 
End Sub 
関連する問題