質問: こんにちは、いつも利用させていただいております。 エクセルVBAのフォーム上から、外部データの内容に対しての抽出条件(各フィールド内のデータ範囲等)を選択または入力してデータを抽出することはできますでしょうか。 これはアクセスで処理したほうが楽なのですが、それは抜きにしてお話させていただきます。
回答: サンプル見ました。 これだけの項目に全て選択条件を設定するフォームは画面が異常に大きくなりすぎると思います。 せっかく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ですが。