VBAを使用してExcelテーブルを自動的にフィルタリングしようとしています。VBAでExcelテーブルをフィルタリングする
表にはいくつかの行があり、現在Sheet2のB5:N584にあります。 テーブルの最初の列にはヘッダーとして "国"があり、これはフィルターを適用する列です。ユーザーが入力した国名に応じて、テーブルを自動的にフィルタリングしたいと思います。国名はSheet2のセルB3にあり、ユーザーが国を入力するところの "= Sheet1!A1"と定義されています。
私が動作させたい方法は次のとおりです。 - ユーザーがSheet1のA1セルに国名を書き込みます。 - 国は自動的にSheet2のセルB3に引き出されます。 - Sheet2のセルB3の内容に従って、最初の列のテーブルがフィルタリングされます。
Public Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B3").Address Then
Range("B5:N584").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:B3")
End If
End Sub
セルB2に、私はちょうど列ヘッダーのように「国」を書いた:
これは私が書いたVBAコードです。
ほとんど何もしていない。唯一の問題は、フィルタが自動的に適用されていないことです。セルA1のユーザ入力国はSheet2のセルB3に引っ張られますが、セルB3の数式バーをクリックして何も変更せずに入力をクリックするまで、フィルタは適用されません。その後、フィルタは下の表に適用されます。
セルをクリックしてEnterキーを押すことなく、セルB2に新しい国があることをテーブルが自動的に検出するのを防ぐことができますか?
ありがとうございます。
ありがとうございました。A1が別のシートにある場合、どうすればいいですか? "= Range()"内の他のシートをどのように参照するのですか? – franciscofcosta
'Whereretsheet_Change'イベントハンドラを* other *シートに配置してから、動作させる必要のあるシートに 'Range 'を修飾する必要があります(例えば' Worksheets( "Sheet2")。 B5:... ') –