• ベストアンサー

ACCESS で マクロの中でフィルタを使用する方法

ACCESS初心者です フォームを使用してテーブルのデータを単にマクロでフィルタ実行をかけて検索をしたいのですが、where条件式のところで文字列をあいまい検索したいのです。(フォームでテーブルの項目の一部を入力して検索をかけたい)like * を使用したいのですが記述の方法がわかりません。教えてください。 よろしくお願いいたします!

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

No.2です。 > 現在[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ] と式を入れている 「顧客情報検索」フォームの「顧客カナ」コントロールの値であいまい検索をしたい、ということですね。 でしたら、以下のように変えれば可能になると思います。 現在: [顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ] 変更後: [顧客マスタ]![顧客カナ] Like "*" & [Forms]![顧客情報検索]![顧客カナ] & "*" これで、「顧客カナ」に入力した文字列を含むものを検索できます。 なお、「先頭一致/後方一致をユーザーが選択できるようにしたい」という場合は、 変更後: [顧客マスタ]![顧客カナ] Like [Forms]![顧客情報検索]![顧客カナ] としておいた上で、ユーザーに「*」を含めて入力してもらう、というのが、プログラムを 組む側としては一番簡単かと思います。 (「モリ」を含む場合は「*モリ*」、「モリ」で始まる場合は「モリ*」、「モリ」で終わる場合は  「*モリ」、「モリ」の完全一致の場合は「モリ」と、それぞれ入力してもらいます)

viva123
質問者

お礼

ありがとうございます。 教えて頂いた通り指定すればできました。 とても助かりました。ご丁寧に本当に感謝いたします!

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

その他の回答 (3)

回答No.4

ANo.1 です。 ANo.2 さんの書かれたように、 >VBAのコードではなく、『マクロ』オブジェクトでの「フィルタの適用」アクションの引数についてのご質問、 ということだったのですね。 また、質問の趣旨も取り違えていました。 フィールド名をあいまい検索して、SQL文のWhere句に入れるものと思い込んでいました。 知識不足と思い込みで的外れの回答をしてしまったようです。 失礼しました。 その上、丁寧なお礼の言葉まで頂き恐縮です。 ANo.2 さんが質問を解決してくださったようなので、viva123 さんが解決したと 思われたら質問を締め切ってくださいますようお願いします。 (質問を締め切らないと、同じ疑問を持った方が同じ質問を投稿することになってしまいます。 また、回答をしようと思われた方がまだ解決していない質問としてこの質問を開いてしまいます。) それでは、マクロ & VBA のお勉強を頑張ってください!!

viva123
質問者

お礼

こちらこそ質問の仕方がまずかったのです・・・ このサイトに質問したのは今回が初めてです 質問を締め切るということも気付いていなかったので助言助かりました。重ねて感謝です!また初歩的な質問をすると思いますが、これからもよろしくお願いいたします!

すると、全ての回答が全文表示されます。
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

VBAのコードではなく、『マクロ』オブジェクトでの「フィルタの適用」アクションの引数についてのご質問、 ということでよろしいでしょうか。 でしたら、『Where条件式』には下記のように、対象フィールド名を角括弧([ ])で囲んで左辺に指定し、 「Like」を挟んで、右辺に検索したい文字列とワイルドカード文字「*」をダブルクォーテーション「" "」で 括って指定します。 フォームのコントロール名ではなく、レコードソースのテーブルやクエリのフィールド名を指定することに 注意してください。 (フィールド名とコントロール名が同じなら問題ありませんが) a)『商品名』が「チョコ」を含むものを抽出  →「[商品名] Like "*チョコ*"」 b)『商品名』が「アップル」で始まるものを抽出  →「[商品名] Like "アップル*"」 c)『商品名』が「ケーキ」で終わるものを抽出  →「[商品名] Like "*ケーキ"」 d)『商品名』が「チョコ」か「ショコラ」を含むものを抽出  →「[商品名] Like "*チョコ*" Or [商品名] Like "*ショコラ*"」 e)『商品名』が「チョコ」を含み、「ケーキ」で終わらないものを抽出  →「[商品名] Like "*チョコ*" And [商品名] Not Like "*ケーキ"」 f)『商品名』が「レモン」を含み、『発売日』が空白(Null)のものを抽出  →「[商品名] Like "*レモン*" And [発売日] Is Null」 ※矢印と括弧『→「 」』はWhere条件式への入力は無用です。括弧内の文字列だけを入力して下さい。

viva123
質問者

補足

早速の回答ありがとうございました。少し質問の記述が足りなかったようです・・・すみません 実は顧客検索をかけるフォームを作成し、そこで顧客名の一部を入力したら、該当者のデータを顧客マスターテーブルから表示するというものなのですが、マクロオブジェクトでのフィルタの実行のところでのwhere条件式"SQLステートメントのwhere句または式の入力"をするよう指示があります。現在[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ] と式を入れているのですがあいまい検索ができません。(フルで名前を入力すると検索できます。)どこにlikeを入れたらいいのでしょうか?フィールドで設定をしたいのです(入力値を限定できません。)マクロだけでは無理なのでしょうか?再度知恵をお借りできればと思います。よろしくお願いします

すると、全ての回答が全文表示されます。
回答No.1

手順としては、 1. テーブルを指定する 2. 指定したテーブルのフィールド名の一覧を取得する 3. フォームで入力された文字列と、2.で取得したフィールド名の一覧を あいまい検索で比較し、一致したものを取得 4. 3.で取得したフィールド名を変数などに格納する 5. 4.で格納した値をWhere句で使用する となるでしょうかね。 参考URL) フィールド名一覧の取得 http://www.geocities.jp/cbc_vbnet/tips/Tabli_Field.html を参考に、それらしいサンプルを書いてみました。 なお、DAOが無いと怒られる場合は、VBE (=コードビルダ)の ツール -> 参照設定 で Microsoft DAO ... にチェックを入れれば良いはずです。 サンプルでは、text0, text1 という2つのテキストボックスがあり、 text0に適当な文字列を入力すると、text1にあいまい検索したフィールド名が表示される。 というものです。 (サンプルの[テーブル名]を書き換える必要があります。) あとは、text1.Value を Where句で使用すればよいのではないでしょうか。 もちろん、text1.Value の代わりに別の変数にフィールド名を格納し、それを 使用してもOKです。 ==== Sample Code ==== Dim DB As DAO.Database Dim Tbf As DAO.TableDef Private Sub Form_Close() DB.Close Set DB = Nothing End Sub Private Sub Form_Load() Set DB = CurrentDb Set Tbf = DB.TableDefs("[テーブル名]") End Sub Private Sub text0_Exit(Cancel As Integer) Dim Fld As DAO.Field For Each Fld In Tbf.Fields 'Debug.Print Fld.Name, 'フィールド名 'Debug.Print Fld.Type, 'データ型 'Debug.Print Fld.Size 'サイズ If Fld.Name Like "*" + text0.Value + "*" Then text1.Value = Fld.Name End If Next Fld End Sub ==== end of Sample Code ====

viva123
質問者

お礼

回答ありがとうございました。 EXCELではVBAを組んだことがありましたが、ACCESSは全くこれからです。マクロオブジェクトだけでなくVBAも併用して使いたいと思っていますので、今回回答いただいた内容を学習していきたいと思っています。まだ現時点では回答の内容はハードルが高くて気が遠くなりましたが、がんばります!本当にありがとうございました。今後の参考にさせていただきたいと思います。

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

関連するQ&A

専門家に質問してみよう