- ベストアンサー
エクセルVBAにて <フォーム上から、クエリ条件を入力し外部データの内容を抽出することは可能でしょうか?>
こんにちは、いつも利用させていただいております。 エクセルVBAのフォーム上から、外部データの内容に対しての抽出条件(各フィールド内のデータ範囲等)を選択または入力してデータを抽出することはできますでしょうか。 これはアクセスで処理したほうが楽なのですが、それは抜きにしてお話させていただきます。
- みんなの回答 (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ですが。
その他の回答 (1)
- urk
- ベストアンサー率33% (18/53)
外部データがどんなものか解りませんが、Excelのマクロでたいがい処理できると思います。 先に外部データを読込解析し、それに基づき抽出条件を作り出し、その後listbox等に検索条件となるものをAdditemで追加すれば、外部データに対応した抽出条件をForm上に表示し、選択させることは可能です。 後はユーザの選択によって SQL文等を作成し、外部DBに投げてやり、結果をExcelのシートに書き込めばいいのでは? こんなとりとめもない回答しか出来ませんが、具体例が解ればもっとなにかアドバイス出来ると思います。 ちなみに、私はできればExcel+VBAでの処理派です。 Accessは結構いいのですが、印刷させたりするのが面倒なので、大概のことはExcelに取り込んでしまいますが。
補足
ありがとうございます。 なにぶん、応用の利かない初級レベルなもので 何をどうしたらいいか悩んでいる状態です。 補足を下記のページに記載しました。 サンプルデータもございます。 http://www7.tok2.com/home/fire/ よろしくお願いいたします。
お礼
ありがとうございました。 エクセルではちょっと *.dbfデータの取り込みが難しいので、Access2000 VBAに乗り換えて考えたいと思います。 まだ、問題は解決してませんがひとまずクローズしたいと思います。
補足
本当にありがとうございます。 試しにやってみます。 なにぶん、VBAでSQLの制御する経験がないもので不安になってしまいます。 まだまだ、悩むところがあるとおもいますのでよろしくお願いします。