ACCESS VBAフォームで複数条件を分岐させる方法

このQ&Aのポイント
  • ACCESSフォーム内のテキストボックスが空欄かどうかで条件分岐させる方法を教えてください。
  • テキストボックスの入力があるかどうかで、エクスポートするクエリを変更したいです。
  • VBAを使って、複数テキストボックスの入力値に基づいて条件分岐を行う方法をご教授ください。
回答を見る
  • ベストアンサー

ACCESS VBA フォーム複数条件

ACCESSフォーム内のテキストボックスが空欄かどうかで条件分岐させる方法を教えてください。 フォーム内に複数テキストボックスがあります。 テキスト1 テキスト2 テキスト3 このテキストボックスの入力があるかどうかで、 エクスポートするクエリを変更したいです。 それぞれのテキストボックスの入力値は、 対応するクエリの抽出条件になっています。 少なくとも、テキスト1には入力があるという条件で、 ・テキスト2が空白なら、クエリ2を出力する ・テキスト3が空白なら、クエリ3を出力する という処理を行いたいのです。 マクロビルダーで、IFを使った処理は作ることができたのですが、 VBAを使って、同じ処理ができるようにしたいです。 どうかご教授のほど、よろしくお願いします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

以下ではどうですか。一応、ボタンクリックの イベントで対応しています。 いくつか余分な処理をコメントアウトしていれてますが、 何かの参考にしてください。 それと、メッセージボックスが出るようになっていますが、 実際の時には必要なければコメントアウトするなり、 消すなりしてください。 (クエリを表示する方法はわかりますよね。) Private Sub コマンド0_Click() 'テキスト1にデータが入力されている場合 If Not IsNull(Me!テキスト1) Then   'テキスト2にデータがありテキスト3にデータがない場合   If Not IsNull(Me!テキスト2) And IsNull(Me!テキスト3) Then     MsgBox "クエリ2を出力します。"     'クエリ2を表示する処理をいれてください。たとえば、以下のように     'DoCmd.OpenQuery "クエリ2"   End If   'テキスト2にデータがなく、テキスト3にデータがある場合   If IsNull(Me!テキスト2) And Not IsNull(Me!テキスト3) Then     MsgBox "クエリ3を出力します"     'クエリ3を表示する処理をいれてください。たとえば、以下のように     'DoCmd.OpenQuery "クエリ3"   End If '  'テキスト2とテキスト3の両方にデータがある場合 '  If Not IsNull(Me!テキスト2) And Not IsNull(Me!テキスト3) Then '    MsgBox "両方ゲット" '    '何か適当な処理 '  End If '  'テキスト2もテキスト3もデータがない場合 '  If IsNull(Me!テキスト2) And IsNull(Me!テキスト3) Then '    MsgBox "両方なし" '    '何か適当な処理 '  End If 'テキスト1にデータが入力されていない場合 Else   MsgBox "出なしてください" End If End Sub ところで、表示したクエリのエクスポートはOffice Linksで Excelなりに出力するということでいいのでしょうか? それとも・・・・・・・直接・・・・・・・?いや何でもありません。

semi076
質問者

お礼

お礼が遅くなりましてすいませんでした。 やりたかった通りのコードをいただき、ありがとうございます。 とても助かりました。 ちなみに、選んだクエリは直接excel出力するつもりで、 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "クエリ1" みたいな感じにしようと思っています。 この度は、どうもありがとうございました。

関連するQ&A

  • ACCESS2010テキストボックス値を抽出条件に

    ACCESS2010にて、フォームに作ったテキストボックスの入力値(数字3桁)をクエリの抽出条件にしたいと考えています。 ただ、そのテキストボックスの数が30個の為、クエリデザイン画面の抽出条件欄にorを用いた条件式で設定することが出来ませんでした。(文字数上限超?) そこで、VBAを用いて抽出条件を設定しようと考えているのですが、初心者のため全く勝手が分かりません。VBAでの設定方法やVBA以外での抽出方法があれば教えて頂けないでしょうか。 尚、テキストボックスには商品コード(数字3桁)を入力し、売上データを集計したクエリにおいて、フォームのテキストボックスに入力された複数の商品コードを抽出条件に設定したいと考えております。 以上、どうかお願い致します。

  • ACCESS2003でクエリを使った検索フォームを作っています。

    ACCESS2003でクエリを使った検索フォームを作っています。 クエリは以下の様になっています。 ----------  番号   タイプ   品名  1111   AA     商品1  2222   AA     しょうひん2  3333   BB     商品しょうひん3 ---------- 品名のフィールドの抽出条件に ---------- Like "*" & [Forms]![品名検索フォーム]![品名検索] & "*" ---------- と入れています。 品名検索フォームは帳票タイプで、フォームヘッダーにテキストボックスを設け 「品名検索」と名前をつけています。 テキストボックスに【商品】と入力すれば番号1111と3333が、【しょうひん】と入力すれば 番号2222と3333が抽出されるように設定し、ここはうまく動きました。 ただ、このフォームを開いた際、テキストボックスは空欄になっているため、全レコードが 表示されてしまいます。テキストボックスが空欄の際は、何も表示したくないのですが どこを触ればいいのでしょうか? どうかよろしくお願いいたします。

  • フォームから複数条件を指定してクエリを開く

    win10 、アクセス2016です フォームのテキストボックスに条件を記入して、この条件に基づき選択クエリ実行したいのですが、上手くいきません。 ご指導願います 条件入力フォーム名:フォームA 条件入力テキストボックス:txtMember 実際の入力条件:"日本 太郎" Or "東京 花子" クエリのデザインビューで[氏名]フィールの抽出条件:[Forms]![フォームA]![txtMember] これで選択が実行されません。 条件テキストを、直接デザインビューに入力すると上手くいきます。 何が、悪いのでしょうか。 ご指導よろしくお願いします。

  • Access フォームコンボボックス空白をクエリで抽出したい

    現在access2000を使って、 フォーム1内にコンボボックスを作って コンボボックス内に1,2,3 と項目を入れています。 一方、クエリを使って、上記フォーム内のコンボボックスをつなげて1,2,3をそれぞれ抽出することはできるのですが、 1から3まで全てをiif関数などで 抽出したいと考えてします。 僕が考えた関数は iif(isnull([フォーム1][コンボ1]),is not null ,[フォーム1][コンボ1]) とクエリ抽出条件内に入力すると、結果は、 1、2、3をそれぞれフォームコンボボックスで選択すれば、クエリに反映されるのですが、コンボボックス内を「空白」の状態にすると、1,2,3すべてがクエリで抽出されるのではなく、何も抽出されないという結果になってしまいます。 どうすれば、クエリで1から3すべてを抽出することができるのでしょうか?多分、iif関数内の「空白」は空白として処理されないような気がします。 よろしくお願いします。

  • フォームからクエリの抽出条件を入力する方法

    既存のデータベースより複数のテーブルを結合し、必要なカラムだけを表示させるようなクエリを作成しました。 他の人でも操作ができるように、フォームを作成し、テキストボックスにて抽出条件を指定し、クエリやレポートを出力するような形にしたいと思っています。 このクエリの抽出条件をフォームより指定する方法で悩んでいます。 現在、作成したクエリの抽出条件の中に [Forms]![フォーム名]![テキストボックス名] と入力し、フォームのテキストボックスで抽出条件を記入してクエリを実行させているのですが、これでは複雑な条件 (Between~ や 条件1 or 条件2 等の指定) を入れると「直前の操作はキャンセルされました」とポップアップが出てしまい、思うとおりにうごきません。 フォーム内でこのような抽出条件範囲の指定ができるようにするにはどうしたらよろしいでしょうか? よろしくおねがいします。

  • Accessであいまい検索するフォームをつくってみたんですが?

    Accessの初心者です。 本などをみながらあいまい検索ができるようなフォームをつくってみましたがフォームを開いた時、全レコードが表示されてしまいます。 クエリーの抽出条件はLike "*" & Forms!フォーム1!テキスト0 & "*"にしてテキストボックスプロパティの更新後処理でDoCmd.Requeryとしました。(意味がよくわからないんですけど) フォームを開いた時やテキストボックスになにも入力されていない時、全レコードが表示されないようにするにはどうすればいいのでしょうか? よろしくお願いします。

  • Accessのクエリ

    初めまして。Accessのクエリについての質問です。 Access2003を使っています。 検索フォームを作り、その検索フォームにテキストボックスを2つ作り、そのテキストボックスに検索したい言葉を入力し、コマンドボタンで作った検索ボタンを押すとマクロでフィルタの実行がされデータを抽出できるというものを作りました。フィルタには選択クエリを使用しています。抽出したい2つのフィールドの抽出条件にあいまい条件のLike "*" & [Forms]![フォーム名]![テキストボックス名] & "*"を入れています。 今はテキストボックスが2つですが、もっと増やしていろんな条件で検索出来るようにしたいので、3つ目のテキストボックスを作り、抽出条件も同じように入れました。ですが、そうすると今までちゃんとできていた最初の2つのテキストボックスによる抽出が違った結果となりでてきました。このとき、新しく作った3つ目のテキストボックスは空欄なので最初と同じ結果が出ると思ったのですが、これは抽出条件が3つはできないということでしょうか?どなたか教えてください。

  • アクセス2000 複数の条件でクエリ作成

    アクセス2000を使用しています フォームを作成して テキストボックスを3つ、ボタンを1つ配置しています テキストボックスには番号、名前、名前ヨミをそれぞれ入力します 名前とヨミはあいまい検索をしたいのですが クエリの条件をどのように書けばいいでしょうか? 番号の条件 Forms!MAIN!番号 名前の条件 like "*" & Forms!MAIN!名前 & "*" ヨミの条件 like "*" & Forms!MAIN!名前ヨミ & "*" をそれぞれ または で記入したのですがうまく抽出されません たとえば、番号のところに何か入力しても残りの2つが空白であるためにあいまい検索なので全てという認識で抽出をかけているのだと思います どのように条件を書けばうまく抽出されるでしょうか

  • アクセス 複数条件の抽出~出力について

    ■アクセスのフォームにて、複数の条件を入力し、合致するリストをエクセルで出力する   データベースを構築しようとしています。  ⇒この複数の条件を入力する件に関し質問です。 ■目的は、顧客からのアンケート回答結果をDBから取出し、エクセルにて解析を行う事です。  情報量が膨大であるため、セグメントした形で出力し効率を上げたいと考えています。 ○テーブルのフィールド構造:   支店(テキスト型)、顧客No(数値型)、顧客名(テキスト型)、質問1(数値型)、質問2、・・・   ○フォーム「データ抽出」の構造: [支店名1][支店名2] [顧客No1][顧客No2] [顧客名1][顧客名2]       【出力ボタン】 ※上記テキストボックスいずれかに入力された条件に合致するデータが          【出力ボタン】を押すとエクセルに出力されるという構造です。          ※ボタンのイベントに「抽出マクロ」を設定。 ○抽出クエリ: 支店 [Forms]![データ抽出]![支店名1]  Is Null [Forms]![データ抽出]![支店名2]  Is Null 顧客No [Forms]![データ抽出]![顧客No1]  Is Null [Forms]![データ抽出]![顧客No2]  Is Null 企業名 like "*" &[Forms]![データ抽出]![顧客名1]& "*" Is Null like "*" &[Forms]![データ抽出]![顧客名2]& "*" Is Null               ○マクロ(抽出マクロ):  クエリを開く (抽出クエリ)  コマンドの実行(エクセルに出力)  閉じる (抽出クエリ) と設定しました。そこで実行確認すると・・・・  (例)     (1)支店名1だけに入力して、他は空欄で出力ボタンを押下。     ⇒条件セグメントされず、全てのデータがエクセル出力されてしまう。     (2)全ての項目に入力して出力ボタンを押下     ⇒条件セグメントされたデータがエクセル出力される。  という現象が起こりました。  例示(2)は良いとして、(1)の様な空欄がある状態でも、条件にマッチした出力をしたいのですが上手くいいかず困っています。    尚、クエリの抽出条件を支店フィールドだけにした所・・ 支店  [Forms]![データ抽出]![支店名1]   Is Null  [Forms]![データ抽出]![支店名2]   Is Nul 支店名1に入力して支店名2は空欄であっても条件にマッチした出力結果が得られました。 長文恐縮でございますが、どなたか解決法をご教授いただきたく存じます。よろしくお願いいたします。

  • VBAでユーザーフォームのテキスト等に空白欄があった場合に、メッセージボックスが出るようにしたい

    今VBAでシミュレーションソフトを作っていますが、 ユーザーフォームのテキスト、リストボックスで入力されたものが、処理されて結果が出るようにしています。 そのなかで、空白のテキスト等があった場合、間違った結果が出力されるので、空白テキストが出ないようにメッセージボックスが出るようにしたいのです。 テキストはTB1~TB6 リストボックスはLB1~LB6 あります。 入力ボタンを押すと どれかひとつでも空白があればメッセージボックスが出力され、 ユーザーフォームに戻るようにしたいです。 ご回答よろしくお願いします

専門家に質問してみよう