- ベストアンサー
エクセルでSQLを使う
VB6.0でのSQLは 理解しているのですが (アクセスのデータベース宣言して、使ってるんですが) エクセルでSQLを 使うには、データベースの宣言など、必要らしい。 でも、エクセルのデータやら、文字列や式まで、混ざっているシートと、データベースが頭の中で一致せず、困っています。 ある範囲を宣言するんでしょうか
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
はずしていたらごめんなさい sub aaa Dim conn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim strSQL As String strSQL = "SELECT * From TESTTABLE Where AAA=" & Range("S3") '<-- ここは必要に応じて Range("A2:D1000").ClearContents 'SQL Serverの接続文字列の例 'connstr = "Provider=sqloledb;" & _ "Data Source=db;Initial Catalog=test;User Id=test;Password=test; " '私は、個人的には、UDLファイルを使うのが好きです 'connstr= "File Name=C:\test\test.udl" conn.Open connstr rst.Open strSQL, conn 'ここがミソ 'たぶんこれがやりたかったのでは? Range("A2").CopyFromRecordset rst rst.Close conn.Close Set rst = Nothing Set conn = Nothing end sub
その他の回答 (5)
エクセルをあたかもデータベースであるかのように見せかけて、VBから接続して使うことは可能です。が、結局「見せかける」部分でよけいな処理が入りますので、処理速度や手間を考えると、素直にエクセル上で処理するのがベストだと思います。また、エクセル側のシートの構成やセルの構成にも有る程度の制限がかかると思います(自由な書式で書かれているものを、データベースのテーブルのように自動的に整形するような機能は無いと思います)。 もちろん、数千件、数万件のデータを扱うのであれば話は別ですが、それにしても、仕事、業務としてきちんとやるのであれば、SQL Serverなどにエクセルのデータを転送して、本物のデータベースとして処理するのがベストです。 結論から言うと、できなくは無いが、手間等を考えるとメリットは無い。というところでしょうか。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >抽出条件が、文字列、数値、時間など混合なもので、SQLのほうが、早そう。と、思ったんですが ワークシートに、SQL は、例えば、DAO なんかで掛けられますが、あまり速いっていう感じはしませんね。Excelは、曲がりなりにも、データベース構造は持っているから、直接できるのです。しかし、オブジェクトを作っていくところから始るものだから、それがスピードを鈍らせる要因なんでしょう。 >セルデータをmdbに吐き出して、それに、SQLかけるんなら、ちっとも、早くなさそうですね。 それは、mdbに吐き出すっていうのは違います。セルのデータをmdbに吐き出すなら、最初に、そっくり吐き出したものを使えばよいわけです。しかし、もともと、Excelのデータ(というよりも、Excelに入るデータ)だったら、Excelのデータを、Excelの関数を呼び出して検索するのが一番速いのです。検索だけの実測で、10倍ぐらいだったと思います。ただし、やっぱり、Excelを呼び出すところから始めるのだから、そのオーバーヘッディングの部分が遅いのです。それに、せいぜい、60,000個程度の検索値でしかできません。 それを、いかにして、データを検索効率よくするために、データを分散させるかっていうのが、コツかもしれません。その計測値は、結構前に、Officeのカテゴリに書いた覚えがあります。 >基本的に、フィルターで済むことなんですが、 >ある範囲のデータを抽出するだけです。 抜き出すのだったら、それが、範囲ならば、AdvancedFilterが、一番速いだろうと思います。使いこなしに少し難はあるわけですが。(仕様にVersion差があります。)
- sendaitaro
- ベストアンサー率25% (6/24)
んーデータのイメージがうかばないので・・ 私だったらDBで処理できるくらいの絞込み ならセルの内容を二次元テーブルに読み込んで 処理するかも、セルをソートして処理すればとか
- sendaitaro
- ベストアンサー率25% (6/24)
誤解してたかも。で、セルに入ってるデータを Db使ってどうしたいんでしょうか? じゃないとご返答できません。
補足
お手を煩わして、申し訳ないです。 基本的に、フィルターで済むことなんですが、 ある範囲のデータを抽出するだけです。 抽出条件が、文字列、数値、時間など混合なもので、SQLのほうが、早そう。と、思ったんですが セルデータをmdbに吐き出して、それに、SQLかけるんなら、ちっとも、早くなさそうですね。 結局、セルにあるデータを抽出するのは、フィルターしかないのですね。
- sendaitaro
- ベストアンサー率25% (6/24)
基本的にVB6と同じでは?参照設定でDAO3.6設定して あとはVBと同じです。だと 私はそれで作って動作しています。
補足
お手数です。 データはエクセルのなかに在るのですが、 DAOって、jetのエンジンを使うわけですよね、すると、一度エクセルのデータ部分をmdbに吐き出して、それを、使う。 ということなのでしょうか。
お礼
感謝します。まさにこれ。お手数お掛かしました。