0

一番上の行がフィルターであるデータのテーブルがあります。ループ内で使用する必要があるフィルターを変更するループがあります。これは、ループが実行されるたびに新しい値が割り当てられる変数 filterColumn です。

filterColumn を使用して「スイッチを入れる」フィルタを決定しようとすると、エラーが発生します

Range クラスの Autofilter メソッドが失敗しました

ActiveSheet.Range("$U$83:$CV$1217").AutoFilter Field:=filterColumn, Criteria1:="<>"

変数を使用してフィルターがどのフィールドにあるかを判断するための正しい構文は何ですか?

問題解決 解決策を見つけました。実際には、フィルターのグループ内の番号を参照する必要があったのに、ワークシート全体のフィルター列の位置を参照していました。たとえば、変更したいフィルターは 84 番目の列である「CF」にありましたが、変更したいフィルターはグループの 64 番目です。

4

2 に答える 2

2
Dim filterColumn As Integer
filterColumn = 2
ActiveSheet.Range("$U$83:$CV$1217").AutoFilter Field:=filterColumn, _
    Criteria1:="<>"
于 2012-08-16T04:56:14.867 に答える
1

編集:@HeadofCateringのソリューションを試しましたが、最初は失敗しました。ただし、参照された列に値を入力すると機能しました(私のソリューションは逆の条件でも失敗しました-列ヘッダーを空白にすると失敗します)。

ただし、これは私 (そしておそらくあなた) が見たものとは完全には一致しません。空白のヘッダーを持つ列にフィルターを追加することは間違いありません。ただし、私が見た失敗で一貫していたことが 1 つfilterColumnありApplication.UsedRangeます。参照している列が実際にその中にあることを確認してみてくださいApplication.UsedRange(簡単な方法:Application.UsedRange.Selectイミディエイト ウィンドウで実行し、列が選択されているかどうかを確認してください)。かなりの数の列を参照しているため、特定のポイント (列ヘッダーを含む) を超える値がない可能性があり、フィルターする列を指定すると、実際にはUsedRange.

テストする興味深い(これは私にとっても新しいことです)ことは、空白のシートを取り、セルに値を入力し、A1B1を選択A:Gして手動でオートフィルターを追加することです-これは列AとBにのみフィルターを追加します(関連する状況は完全に空白のシートにフィルターを追加しようとすると見つかります)。

せせらぎで申し訳ありません-これはあなたの問題でさえない可能性があります:)


古いソリューション (上記の条件が使用されている場合は機能しません)

やり過ぎかもしれませんが、シートの値も設定してみてください (ここではサンプル範囲を使用したことに注意してください)。

Sub SOTest()

Dim ws As Worksheet
Dim filterColumn As Integer

' Set the sheet object and declare your variable
Set ws = ActiveSheet
filterColumn = 2

' Now try the filter
ws.Range("$A$1:$E$10").AutoFilter Field:=filterColumn, Criteria1:="<>"

End Sub
于 2012-08-16T05:26:50.933 に答える