🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

ADO.NET

ADO.NETは.NET Frameworkで各種データベースへの統一された接続機能を提供するソフトウェアコンポーネントの集合です。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

3回答

3913閲覧

adodb.recordset.filterにおいて「一つのフィールドで複数の値」の絞り込みを「複数のフィールド」で行いたい場合の処理について

Nor-Xor

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

ADO.NET

ADO.NETは.NET Frameworkで各種データベースへの統一された接続機能を提供するソフトウェアコンポーネントの集合です。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

0クリップ

投稿2021/03/07 02:44

編集2021/03/07 02:47

microsoftのadoのfilterに関する解説には

'--------
AND と OR の間に優先順位はありません。 句はかっこでグループにまとめることができます。 ただし、次のコード スニペットのように 、OR で結合された句をグループ化し 、AND を使用してグループを別の句に結合することはできません。
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

この場合は、フィルターを次のように構成します。
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
'--------

と記載がありますが、現実にデータベースから絞り込みを行いたい場合そんな簡単なケースは多くなく、
あるフィールドから複数要素、別のフィールドから複数要素で絞り込みたいケースが多いです。

excel vba でいうところのrange.filterであればfilterの2段構えで先にLastNameをフィルタリングしてからFirstNameのフィルタリングが可能で、accessを立ち上げてGUI上で行なうと簡単にできるのですが、これをvbaでrecordsetを操作してやろうとしても後者のfilterが優先されてしまい、うまくいきません。

上述のmicrosoftの解説の通りの式にしようとすると分配展開が多くなりすぎてformulastringの上限を軽く超えてしまいます。
excel vbaのrange.filterでは絞り込み要素にarray指定ができるので、それと似たような方法がないかと探していますがたどり着きません。

どなたかレクチャーいただけますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

.Find,.Sort,.Filterのいずれも指定が文字列で、かなりSQLチックなんでIN句とか用いて表題のようなことができないのかな〜とか思っちゃいますが、この文字列ってSQLじゃないんでしょうかね。

投稿2021/03/23 08:54

Nor-Xor

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2021/03/23 10:28

SQLチックではあるけど、公式ドキュメントによるといろいろ制限がありますね。 ADOよりDAOの方が制限はすくなかったと思います。 ただ、Filterプロパティは私は使ったことはないです。SQLのWHERE句で間に合いますので。
Nor-Xor

2021/06/06 03:05 編集

確かに。 実際にSQL触るようになると、ADODBの各コマンドで使うのがopenとgetrowsくらいになりますもんね。 .executeでコマンドぶん投げる方が効率もいいですし。
guest

0

ありがとうございます。
どうにもSQLに抵抗があって、なるべく触れずにいたいと避けてました。
食わず嫌いというもので、やってみると便利な代物でした。

投稿2021/03/08 11:00

Nor-Xor

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Filter プロパティ (ADO) | Microsoft Docs

公式のドキュメントに記載してあることなので、それは仕様としてあきらめしかないかと。

Filterを使わずにレコードセットをOpenするときにSQLで開けば、SQLのWHERE句ではそのような制限なしに条件式を記述できます。
Filterを使うより、SQLのWHERE句で条件を設定してた方が処理も高速です。

投稿2021/03/07 07:21

hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nor-Xor

2021/03/08 11:01

ありがとうございます。 どうにもSQLに抵抗があって、なるべく触れずにいたいと避けてました。 食わず嫌いというもので、やってみると便利な代物でした。
Nor-Xor

2021/03/23 08:55

.Find,.Sort,.Filterのいずれも指定が文字列で、かなりSQLチックなんでIN句とか用いて表題のようなことができないのかな〜とか思っちゃいますが、この文字列ってSQLじゃないんでしょうかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問