• ベストアンサー

アクセスVBA フィルタの最大件数

Forms("テーブル1").Filter = "FLD1 = '検索値1' And FLD1 = '検索値2'" ・・・ とandで繋げられる最大数を教えてください。 ヘルプのアクセスの仕様を見ましたが見つけられませんでした。 ただ、クエリでは 「WHERE 句または HAVING 句内の AND の個数 99 」 となっていたので、VBAのフォームでも99なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mhassy
  • ベストアンサー率43% (16/37)
回答No.1

質問に対する直接の答えではないのですが・・・ 別の手法を参考までに。 データの抽出条件を「フィルタ」機能を使って選別せずに、 複数の「クエリを組み合わせて」段階的に選別してみてはいかがでしょうか? ※伝わりやすいように、条件数を減らして説明します。 例えば、4つの条件でデータを選別したい場合、4つのクエリに分けて・・・ 1:全データ ⇒ クエリ1(国別で条件が成立するものを選別 ex.日本) 2:クエリ1の結果を元に ⇒ クエリ2(都道府県で選別 ex.郵便番号など) 3:クエリ2の結果を元に ⇒ クエリ3(世帯主の名前で選別 ex.田中さんのみ) 4:クエリ3の結果を元に ⇒ クエリ4(性別で選別) こうすることで、一度にネストした記述をせずに、段階ごとの条件記述チェックも可能になりますし、メンテナンスもしやすくなります。 フォームが表示するデータは、「クエリ4の結果」を指定するだけになりますし、クエリ4が実行される場合には自動的にクエリ1から「連結して動作」します。 条件の多さや、レコード数やテーブルサイズも関係する「処理スピードの問題」が発生する可能性も有ります。 しかし、ご希望の「選別条件」の最大数をご質問されるほどの前提があるならば、デバッグやメンテの容易さを考慮した構造をお勧めします。

1hdthd
質問者

お礼

なるほど。色々な発想がありますね。 ちなみに 「条件の多さや、レコード数やテーブルサイズも関係する「処理スピードの問題」が発生する可能性も有ります。」 の部文で気になったのですが、mhassyさんのやり方のようにフィールドごとに分けた方が早い、負担がかからないのでしょうか? 再度ご回答いただければ幸いです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

これも直接の回答ではないが http://www.accessclub.jp/bbs/0024/beginers10921.html でSQLの文字列の最長の話が出ている(ヘルプにあるそうな。 その他参考 http://hp.vector.co.jp/authors/VA014071/tips/spec_ac.html (1)FilterはSQLを使っているかも (2)FilterはSQL文で置き換えられると思う のでこの辺が制限ではないでしょうか。

1hdthd
質問者

お礼

ありがとうございます。参考にします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Accessのマクロ、クエリについて

    OS Win2000、Access2000を使用しています。 「一覧」というテーブルから「条件」というフォームに検索条件を入力して「結果」というフォームで検索結果を表示させたいのですが、検索の項目数が多すぎて(文字数が多すぎるとメッセージがでました。)マクロのデザイン画面の「Where条件式」の欄に入りきらないのです。 ヘルプを見るとVBAだともっと入るというようなことが書いてありましたが、VBAの組み方がさっぱりわかりません。 クエリでやってみようとも思いましたが、「条件」「結果」のフォームをどう使っていいのかわからず、まいっています。 「条件」「結果」のフォームをいかして検索できる方法をお分かりの方がいましたら、教えてください。 ちなみに、「Where条件式」の欄に入力しようとした条件式が、 [txt_01] Like '*' & [Forms]![条件]![t_01] & '*' And [txt_02] Like '*' & [Forms]![条件]![t_02] & '*' And [txt_03] Like '*' & [Forms]![条件]![t_03] & '*' And ・・・・・・ と、なり最終的に[txt_13]までになります。 Access初心者のため説明がわかりづらいと思いますが、よろしくお願いします。

  • アクセス2003の質問5種

    アクセス2003の作りこみで悩んでいます。ほぼ初心者です。 (1)bin-chanさんの「まとめ~」とはどういう意味でしょうか? (2)検索キーワードを入力し、そのキーワードでテーブル内の全フィールドから検索する方法はありますか?VBA マクロどちらでも構いません。クエリを使わない方法でお願いします。 (3)AND検索で、検索キーワード欄に空欄があっても検索を実行する方法はありますか? 当方、検索条件をプルダウンから選び、検索キーワードを入力し、検索しています。 その際のイベントビルダは、 Me.Filter="" & Me![コンボ53] & " like '" & "*" Me![検索ワード] &"*"&"' and "& Me![コンボ57]~ です。 とすると、オブジェクトに値を代入出来ませんやらが出てきます。どうしたらよいでしょうか? 出来れば、VBAで行いたい。 (4)マクロのフィルタ実行で、where条件式を次のようにすれば、空欄があってもOKなんですが、 その際に検索条件をプルダウンで選ぶにはどうすればよいのか教えてください。 [フィールド名] Like "*" &[Forms]![フォーム名]![検索ワード] & "*" And [フィールド名] Like "*" &[Forms]![フォーム名]![検索ワード2] & "*" (5)またこのフィルタの実行マクロを使っての全フィールドからの検索をする場合にはどうしたら良いでしょうか? アクセスの構造としては、 基幹となるテーブルAと一対多にあるテーブルB、そしてテーブルBと一対一にあるテーブルCの3つをクエリでまとめ、フォームを作っています。 (1)~(5)全部が揃っての回答でなくても構いません。 どうかよろしくお願いいたします。

  • Access VBA フィルター

    Microsoft Access のVBAで、メインフォームで条件を設定するとサブフォームがフィルターされて開くというVBAを作っています。 SQL文を「SQLCode」という文字列型変数に入れました。 具体的には以下の内容がSQLCodeに入っています。 [担当者]=[Forms]![検索]![担当者] この変数をフォームにフィルターをかけて開くコードに入れたいのですが、以下の?の部分を教えてください。 Me!Fサブフォーム.Form.Filter. = ? Me!Fサブフォーム.Form.FilterOn = True

  • access2000のVBAで「直前の操作をキャンセル」

    こんにちわ。 いまaccess2000のVBAでフォームの元になるテーブルへの フィルタ操作をプログラムしています。 1つの条件を与えたときは正常にフィルタできるのですが, 下記のように2つの条件を与えると, 「直前の操作はキャンセルされました」という エラーメッセージが表示されてしまいます。 「 Me.Filter = vbNullString ' クリア Me.Filter = "[項目1]='" & Forms![F_フォーム1].[cmbコンボ1] & "'" Me.Filter = Me.Filter & " AND [項目2]='" & Forms![F_フォーム1].[cmbコンボ2] & "'" Me.FilterOn = True 」 何かコーディングが足りないのでしょうか? 教えてください。お願いします。

  • VBAで日付型とテキストでフィルタをかけるには?

    テーブルのデータは フィールド1 2012/1/1 2012/1/2 2012/1/3 2012/1/4 2012/1/5 2012/1/6 2012/1/7 2012/1/8 2012/1/9 2012/1/10 フィールド2 A A A A A B B B B B です。 このクエリをもとに票フォームを作成して、 ・txt_始まりテキスト ・txt_終わりテキスト ・txt_フィールド2テキスト を作りました。 あとコマンドボタン(cmd_抽出)も作りました。 このコマンドボタンを押して 日付とテキストを抽出したいのですがVBAでのやり方を教えてください。 クエリなら ------------------------------------------------------------ SELECT テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.フィールド1) Between #1/4/2012# And #1/6/2012#) AND ((テーブル1.フィールド2)="A")); でできました。 ------------------------------------------------------------ しかしVBAで ------------------------------------------------------------ Private Sub cmd_抽出_Click() Me.Form.Filter = "フィールド1 Between #" & Me.txt_始まりテキスト.Value & "# And #" & Me.txt_終わりテキスト.Value & "#" & _ "' And フィールド2 like '*" & Me.txt_フィールド2テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub ------------------------------------------------------------ をすると、 ------------------------------ 実行時エラー3075 構文エラー:演算子がありません。 ------------------------------ になります。 どうすればいいか教えてください。 結果は、 ------------------------------ フィールド1 フィールド2 2012/01/04 A 2012/01/05 A ------------------------------ です。 ご回答よろしくお願いします。

  • Access2002のフィルタ機能について

    Access2002を使用しています。マクロのフィルタを使って抽出をしたいのですが・・・。 テーブル構造ですが 氏名    備考    備考2 ○○          ㋹ ××    B     ㋹ △△    A     ㋹ ◆◆    B というものがあります。 今したいのは 備考と備考2に条件をいれ抽出させたいのですが どちらにも条件が入るときは抽出されるのですが どちらか一方にのみ条件を入れた場合うまく抽出できません。 たとえば 備考2 で㋹を抽出とした場合。 氏名    備考    備考2 ○○          ㋹ ××    B     ㋹ △△    A     ㋹ 上記結果が必要なのですが 氏名    備考    備考2 ××    B     ㋹ △△    A     ㋹ 結果はこうなります。 フィルタの条件式は [テーブル]![備考2] Like IIf([Forms]![フォーム]![検索]=Null,"*","*" & [Forms]![フォーム]![検索] & "*") And [テーブル]![備考] Like IIf([Forms]![フォーム]![備考検索]=Null,"*","*" & [Forms]![フォーム]![備考検索] & "*") 元のテーブルにデータが入力されていないものが抽出で出てきません。 どーしたらよいのでしょうか??教えてください。

  • ACCESSで指定されたテーブルから削除できませんでしたとエラー

    お世話になります。 似たような問題をググッてみたのですが、イマイチ解決に繋がらず、 最終手段と質問させて頂きました。 現在、ACCESS2007で削除クエリを作成していますが、 題名のエラーが表示されてしまいます。 ・テーブルAとBが存在します。 ・テーブルBのレコードを削除したいです。 ・削除条件は、テーブルAでSELECTした結果に対し、  テーブルAとテーブルBで一致するものを削除します。 ・A/B両テーブルともに主キーは設定されていません。 ・また、リレーションも張っていません。 ・データシートビューは想定したものが表示されます ・作成したSQLは以下のような感じです。 --------------------------------------------------- DELETE T2.* FROM T2, ( SELECT * FROM T1 WHERE T1.Fld1 = "01" AND T1.Fld2 = "002" AND T1.Fld3 BETWEEN #2008/4/1# AND #2009/3/31# AND (T1.Fld4 ="A" OR T1.Fld5 = "B") ) AS T1a WHERE T2.Fld1 = T1a.Fld1 AND T2.Fld2 = T1a.Fld2 AND T2.Fld3 = T1a.Fld3 --------------------------------------------------- 以上、解決策を伝授頂けないでしょうか? よろしくお願いします。

  • Accessのサブフォームで#Nameエラーについて

    こんにちはいつもお世話になります。 Accessで教えてください。 Accessのフォームで大分類・中分類・小分類・割引率という項目を作り、メインフォームで大分類と中分類を選択してサブフォームで小分類を選択すると割引率が隣に表示されるようにしたいのです。 1つのテーブル内に全部項目が収まっているので、クエリで抽出区分に各フォームのテキスト名を指定してパラメータにしてやってみたところなぜかわかりませんが、クエリを実行すると小分類のパラメータが開いてしまいます。 SQLは「SELECT テーブル1.SUP, テーブル1.カテゴリ, テーブル1.タイプ, テーブル1.標準値引率 FROM テーブル1 WHERE (((テーブル1.SUP)=[Forms]![算出用]![SUP]) AND ((テーブル1.カテゴリ)=[Forms]![算出用]![カテゴリ]) AND ((テーブル1.タイプ)=[Forms]![割引率]![タイプ]));です。 そして、フォーム内には、割引率のコントロールソースとして「=test!割引率」と入れています。すると、フォームのテキストで#Nameエラーが出てます。すみませんどうしても何が違っているのだか分からなくて教えていただけると助かります。

  • access VBA SQLの記述について

    access VBA SQLの記述について (下記は私の作成したものではありません) -------------------------------------------- 'IDの取得 myID = [Forms]![フォーム]![ID] '削除クエリ SQLstr = "DELETE FROM テーブル WHERE ID = " & myID DoCmd.RunSQL SQLstr -------------------------------------------- 一応この記述で、問題なく動作しているんです。 「" & myID」の部分は、なぜは正しいのでしょうか? 「" & myID & ""」でないといけないと思っていました。 「&」で囲い、 さらにそれを「”」で囲い、 「&」の前後は半角スペースを挿入する。 という記述のみが正しいと思っていたのですが・・・? また、こういう点の総括した正しい情報はどこで学べますか?

  • Accessのフィルタについて

    Access2000を使っています。 フォームに配置した「TextBox1」と「TextBox2」(両者とも日付/時刻型)を引数として指定範囲の抽出をすべく Me.Filter="検索結果 Between #"& TextBox1 &"# And #"& TextBox2 &"#" Me.FilterOn=True (「検索結果」はテーブルに配置したフィールドに連結) のコードをボタンのクリックイベントに設定しました。 ところが、例えば「TextBox1」に「01/02/03」、また、「TextBox2」に「01/05/04」を入力して、ボタンをクリックしても抽出されません。 フォームに戻って、フォームのプロパティで確認するとフィルタの欄に 「検索結果 Between #01/02/03# And #01/05/04#」と表示されておりコードに間違いはないと思われますが、フォームフィルタをかけてみると、検索結果のテキストボックスに「Between #03/01/02# And #04/01/05#」という具合に日付が「日/年/月」に置き変わって表示されています。これがコードを実行しても抽出されない原因だと思われるのですか、何故、このように日付が変わってしまうのでしょうか。また、どうすれば変わらないようにできるのでしょうか。 よろしくお願いします。

専門家に質問してみよう