別のワークシート (総計) のセル B1 に入力した日付に基づいて、多くのワークシートをフィルター処理するマクロ (ApplyFilter) があります。そのマクロは次のとおりです。
Sub ApplyFilter() 'Filters all worksheets except worksheet1 for date entered into _
'Grand Totals!B1
Dim WS_Count As Integer
Dim I As Integer
Dim FilterRange As Variant
FilterRange = Range("'Grand Totals'!B1")
' Set WS_Count equal to the number of worksheets in the active
' workbook.
WS_Count = ActiveWorkbook.Worksheets.Count
' Begin the loop.
For I = 2 To WS_Count
Sheets(I).Select
ActiveSheet.AutoFilterMode = False 'Remove any existing filters
Worksheets(I).Range("A2").AutoFilter Field:=1, Criteria1:=Range("'Grand Totals'!B1").Text
Next I
Sheet1.Activate
End Sub
このマクロを手動で実行すると、必要に応じて実行およびフィルタリングされます。ただし、このマクロを別のサブから呼び出すと、次のようになります。
Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("B1")) Is Nothing Then _
Call ApplyFilter
End Sub
利用可能なマクロのリストを提供する「マクロ」ウィンドウが表示されます。"ApplyFilter" マクロを選択して [実行] をクリックすると、マクロが実行され、必要に応じてワークシートがフィルター処理されます。
サブルーチン内からマクロを自動的に実行することについての多くの参照を見つけましたが、実行するマクロを選択する必要がある「マクロ」ウィンドウについて言及しているものはありません。代わりに、"Grand Totals" ワークシートのセル B1 に日付を入力して Enter キーを押すと、sub worksheet_change(ByVal Target As Range) が自動的に "ApplyFilter" を呼び出し、日付フィルターを多数のワークシートに適用する必要があります。
ボタンを作成し、Button_Click を使用して「ApplyFilter」を呼び出しましたが、すべて問題ありません。ただし、日付を入力してから Enter キーを押してマクロを実行する方が直感的です。Button_Click メソッドを我慢することはできますが、最初に VBA を学ぼうとしています。それを機能させる方法を学びたいと思うほど頑固であり、機能するものだけで解決したくありません。