• ベストアンサー

エクセルVBAにて <フォーム上から、クエリ条件を入力し外部データの内容を抽出することは可能でしょうか?>

こんにちは、いつも利用させていただいております。 エクセルVBAのフォーム上から、外部データの内容に対しての抽出条件(各フィールド内のデータ範囲等)を選択または入力してデータを抽出することはできますでしょうか。 これはアクセスで処理したほうが楽なのですが、それは抜きにしてお話させていただきます。

  • hooma
  • お礼率32% (51/157)

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

  • ベストアンサー
  • urk
  • ベストアンサー率33% (18/53)
回答No.2

サンプル見ました。 これだけの項目に全て選択条件を設定するフォームは画面が異常に大きくなりすぎると思います。 せっかくExcelでやっているので、選択条件を項目名に対応したセル上に入力させて、それを拾って SQLを作ってはいかがですか。 例えば、  2行目、3行目が検索条件入力範囲で、5行目が項目名で、シート上には[ファイル選択]ボタンと[検索開始]ボタンが有るとします。   1. まず[ファイル選択]ボタンをクリックしてもらい、該当するファイル(DB)を選んでもらいます。画面の5行目以下を初期化して外部データの全フィールド名を読込みます。 読み込んだ全フィールド名を5行目に全て表示させます    Range("A5").activalt    for i=1 to 項目数 activecell.offset(0,i-1).value=項目名(i) next i 2.エクセルのシート上の2行目と3行目に、検索条件を入力してもらう 必ず2行目の方が少ない数値だとして検索条件を入れてもらいます。 3.シート上に作成した[検索開始]ボタンをクリックしてもらい、検索条件を作ってSQLを投げてあとは、結果をシートの6行目から下に書き出す。 この例では、SQL文を文字列StrSQLに入れるものとします。    Range("A5").activalt    StrSQL="select * from Table名 where "    for i=1 to 項目数 if activecell.offset(-3,0).value<>""  '選択条件1 if activecell.offset(-2,0).value<>"" '選択条件2 StrSQL=StrSQL & "and" & 項目名(i) & ">=" & _ activecell.offset(-3,0).value StrSQL=StrSQL & "and" & 項目名(i) & "<=" & _ activecell.offset(-2,0).value else StrSQL=StrSQL & "and" & 項目名(i) & "=" & _ activecell.offset(-3,0).value end if end if activecell.offset(0,1).activate next i これで、SQLの条件式が出来るので、後はDBとのI/Fで出来ると思いますが。  DBFファイルとのI/Fプログラムは作ったこと無いので、OracleでのSQLですが。

hooma
質問者

お礼

ありがとうございました。 エクセルではちょっと *.dbfデータの取り込みが難しいので、Access2000 VBAに乗り換えて考えたいと思います。 まだ、問題は解決してませんがひとまずクローズしたいと思います。

hooma
質問者

補足

本当にありがとうございます。 試しにやってみます。 なにぶん、VBAでSQLの制御する経験がないもので不安になってしまいます。 まだまだ、悩むところがあるとおもいますのでよろしくお願いします。

その他の回答 (1)

  • urk
  • ベストアンサー率33% (18/53)
回答No.1

外部データがどんなものか解りませんが、Excelのマクロでたいがい処理できると思います。  先に外部データを読込解析し、それに基づき抽出条件を作り出し、その後listbox等に検索条件となるものをAdditemで追加すれば、外部データに対応した抽出条件をForm上に表示し、選択させることは可能です。  後はユーザの選択によって SQL文等を作成し、外部DBに投げてやり、結果をExcelのシートに書き込めばいいのでは?  こんなとりとめもない回答しか出来ませんが、具体例が解ればもっとなにかアドバイス出来ると思います。  ちなみに、私はできればExcel+VBAでの処理派です。  Accessは結構いいのですが、印刷させたりするのが面倒なので、大概のことはExcelに取り込んでしまいますが。

hooma
質問者

補足

ありがとうございます。 なにぶん、応用の利かない初級レベルなもので 何をどうしたらいいか悩んでいる状態です。 補足を下記のページに記載しました。 サンプルデータもございます。 http://www7.tok2.com/home/fire/ よろしくお願いいたします。

関連するQ&A

  • ACCESS のフォームの内容をクエリーの抽出条件にするには?

    Windows2000,Access2000です。 Accessのクエリーでデータを選択して表示する作業をしています。 現在はクエリーを自分で修正して実行しています。 でもそれではみんなで使うには使いづらいので、 フォームを作成しそのフォーム上の入力項目に入力された データをクエリーの抽出条件に指定する様にしようという事になりました。 フォーム上の入力フィールドの内容をクエリーの抽出条件に設定する方法はすぐわかりました。 でも「like」を指定する方法がわかりません。 つまりフォーム上の入力データを“xxx”とした時、クエリーの抽出条件を 「like "*xxx*"」としてクエリーを実行したいのです。 つたない文章でわかりにくいかと思いますが、ご存じの方おりましたら、 よろしくご教示ください。

  • フォームからの入力でクエリを抽出するには?

    OS:Win7 Access2003 フォームで入力したデータを元にクエリで抽出させます。 フォームに'ABC'と入力した時は、クエリで'ABC'のデータを表示し、 フォームが未入力の時はすべてのデータを表示させるにはどうすればよいでしょうか? 上記条件では'ABC'のみ抽出させ、'DABC','ABCD'は対象外にします。 宜しくお願いします。

  • クエリの検索条件をフォームで指定したいのです

    OS winXP Access2003です よろしくご指南お願いいたします。 フォームのコンボボックスの選択で あり なしを選択してクエリの抽出条件のフィールドのデーターのある物無い物を分けて表示させたいのですがうまくいきません   フォームのコンボボックスの選択で あり の時  フィールドの抽出条件 値  ‹› ""   フォームのコンボボックスの選択で なし の時  フィールドの抽出条件 値  Is Null をそれぞれ入れたいのですが どのようにすれば良いのか ご指南ください

  • ACCESS フォーム入力内容を条件にクエリを作る

    ACCESS2003です。 フォーム上に、 会社名 住所 というフィールドがあります。 クエリで、 ・フォームの会社名が未入力の場合は、全ての会社が対象 ・フォームの会社名が入力されている場合は、会社名で抽出(部分一致 クエリだと 「Like "*条件*"」になるような条件) というような条件式を作りたいのですが、うまくいきません。 どのような条件式を作ればよいでしょうか。

  • クエリーで全部のデータを抽出する方法

    アクセスのクエリーでデータを抽出する時、具体的にはフォームでデータを入力し抽出するのですが、たとえばフォームのテキストボックスに数字を入れないとそのクエリーのフィールドは抽出がかからないようにしたいのです。(抽出フィールドが1つなら数字をいれなければクエリーのデータすべてが表示される) ----------------------------------- フィールド   A      B     c テーブル   テーブル1 テーブル1 テーブル1 抽出条件    []    [] または    ---------------------------------- 上はクエリーのデザインですがクエリーをひらくと抽出条件をきいてきますがA列は何も入力しないでB列では1と入力するとBの列に1の入ってるレコードを表示させたいのです。(もし空欄が無理ならAの列の時何かある文字を入力すると全部表示になる、でもいいです。) まわりくどくなりましたが、アクセス超入門者です。よろしくおねがいします。

  • クエリの抽出条件をフォームで入力したものにしたい

    こんにちは。すみませんうまくいかないのでどなたか助言していただきたくお願いいたします。 クエリの抽出条件をフォームで入力した値にしたいと思っており、クエリの抽出条件欄に >=[集計フォーム]![開始日入力] と入力しました。「フォームの名前」!「テキスト名」です。 そしてフォームに値を入力してクエリ実行ボタンをクリックするとパラメータクエリのようになってしまいます。 フォーム内で何か設定をしないといけないのでしょうか? すみませんがよろしくお願いいたします。

  • VBAでアクセスのクリエの抽出条件を変更

    エクセルで、契約管理表を作っています。 仕様としては、エクセルとアクセルを使用し、 エクセルからアクセスのデータベースを操作 するようにしています。 (複数拠点で仕様する為。) アクセスでは「T_契約メイン」というテーブルと 「T_契約今月」というクエリがあって、今月分の データのみ抽出できるようになっています。 これを、エクセルのVBAのフォームでADOとSQL等を 利用してデータ取得、編集、新規契約の登録などを 行うように考えています。 ここまでの内容は無事、作成する事が出来ています。 ここからが質問なのですが、クエリ「T_契約今月」の抽出 条件をエクセルVBAから変更するにはどのようにコードを 書けばいいのでしょうか? 毎月毎月、アクセルを開いてクエリのデザインビューで 抽出条件を変更すればいいのでしょうが、あんまりスマート では無いですよね。 出来れば、エクセル側からVBAで設定変更等のフォームや ボタンを作って、処理したいのですが…。 とりあえずアクセスに繋げるところまでは分かるので、 クエリの抽出条件変更の部分のコードの記載方法を 教えて頂けないでしょうか? どうぞよろしくお願いいたします。

  • AccessのクエリとExcelの外部データの取り込み機能について

    AccessのクエリとExcelの外部データの取り込み機能について 質問させてください。 Access初心者です。 クエリの抽出条件でnot likeを使うと Accessで実行したときには正常に動作するんですが、 Excelの外部データの取り込みのAccessデータベースを選択してExcelへ出力すると 正常に出力されません。 具体例ですが、 ---------------------------------- 住所フィールドには東京都の自治体の名前 個人フィールドには担当者の名前 ---------------------------------- が入ってるとします。 クエリの抽出条件は以下のような感じです。 ---------------------------------- 個人フィールド,住所フィールド 鈴木,not like "*八王子市*" 斉藤, 田中, ---------------------------------- そうするとAccessのクエリの実行結果では 鈴木さんの八王子市を抜いたデータ 斉藤さんの全データ 田中さんの全データ が出力されると思います。 しかし、Excelの外部データ取り込みを使うと 鈴木さんの全データ 斉藤さんの全データ 田中さんの全データ が出力されてしまいます。 どうすれば正常出力できるのでしょうか? Accessからコピー&ペーストしてExcelに貼り付けるしかないのでしょうか? (参考) ・使っているOfficeは2007SP2です。

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

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

  • Accessのクエリで、抽出条件を「未入力のもの」としたい

    いつもお世話になっております。m(_ _)m Accessのクエリで、抽出条件に「そのフィールドが未入力のもの」としたいのですが、どのように記述すればよいのでしょうか? よろしくお願い致します。