2

別のワークシート (総計) のセル 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 を学ぼうとしています。それを機能させる方法を学びたいと思うほど頑固であり、機能するものだけで解決したくありません。

4

1 に答える 1

2

シート コードはGrand Totalsシート内にある必要があります

  • Grand Totalsシートタブを右クリック
  • View Code
  • 以下のコードがここに貼り付けられていることを確認してください
  • で Excel に戻る

総計シート コード

Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("B1")) Is Nothing Then Call ApplyFilter
End Sub

より効率的なフィルター コード

Sub ApplyFilter()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Sheets
      If ws.Name <> "Grand Totals" Then
        ws.AutoFilterMode = False
        ws.Range("A2").AutoFilter Field:=1, Criteria1:=Range("'Grand Totals'!B1").Text
      End If
Next
End Sub
于 2013-03-13T04:51:31.743 に答える