製品のテーブルを含む ADO レコードセットがあります。テーブルをフィルタリングするために使用される製品のリストがあります-このようなフィルターを動的に構築します(ただし、より長くなります):
rs.Filter = "productType = 'product A' " _
+ "or productType = 'product B' " _
+ "or productType = 'product C' "
これは私にとってはうまくいきました。フィルタリングされた行を別のワークシートにコピーしましたが、すべて問題ありませんでした。
その後、新しいプロジェクト要件により、除外された項目も取得する必要がありました。よく、私はいくつかのブール代数を行い、反対のフィルターで同じクエリを実行しました:
rs2.Filter = "productType <> 'product A' " _
+ "and productType <> 'product B' " _
+ "and productType <> 'product C' "
これもうまくいきました。除外された項目を別のワークシートにコピーしたので、含まれた項目と除外された項目の両方ができました。
しかし、新しい要件は、特別なケースに対処しなければならないことを意味します。製品 B は特定の日付にのみ含まれます。これで、含まれるアイテムを検索するポジティブ フィルターで問題なく動作します。
rs.Filter = "productType = 'product A' " _
+ "or (productType = 'product B' and expiry = 16/08/2013) " _
+ "or productType = 'product C' "
しかし、ネガティブフィルター(除外されたアイテムを見つけるためのもの)で問題が発生しました。ADO Recordset Filter のネストされた OR の制限により、次は許可されません。
rs2.Filter = "productType <> 'product A' " _
+ "and (productType <> 'product B' or expiry <> 16/08/2013) " _
+ "and productType <> 'product C' "
代替ソリューションはありますか?たとえば、フィルターの補数 (つまり、除外する行のみ) を取得する方法はありますか?
強調しておきたいのは、含める製品のリストは動的に作成されるため、コードを書くときには利用できないということです。