こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルVBAでのSQLについて

エクセルVBAで、SQLを記述しているのですがwhereの抽出条件にセルの値を指定したいと思っています。その当該セルの値を変更することで、抽出条件を変更することができるようにしたいです。

しかし、どのような記述にすればよいか分かりません。以下のような記述をしたのですが、うまくいきません。すみませんが、教えていただけないでしょうか。よろしくお願い申し上げます。

◆抽出条件を指定するセル:A1 セルA1には、数字(例:1000、2000等)をいれます。

mySQL = " SELECT * FROM [◆◆シート!] WHERE Range("A1")"

投稿日時 - 2015-12-10 21:41:52

QNo.9093793

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

ADOを使います。
Sheet1の下記のデータの中から、点数が50点のものを抜き出してSheet2に書き出します。過去に私のテストした単純なデータを使って説明します。
例データ Sheet1のA1:C12
番号氏名点数1
1大島10
2奥村20
3大島30
4井上40
5永田50
6長井60
7三村50
8森田40
9佐田30
10田島20
11田上10
一旦下記のブック名で保存しておく。
’---
コード
標準モジュールに
Sub test01()
Dim cnStr As String
Dim mSql As String
Dim cn As Object
Dim rs As Object
Const EXLFol = "C:\Users\XXX\Documents" 
strFilename = "SQLで抜出.xlsm"
mSql = "select F1, F2,F3 from [Sheet1$] WHERE F3=50"
'---
Set cn = CreateObject("ADODB.Connection")
cnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\惇\Documents\" & strFilename & ";" & _
"Extended Properties=""EXCEL 8.0;HDR=NO;""" & ";"
'MsgBox cnStr
cn.Open cnStr
Set rs = CreateObject("ADODB.Recordset")
rs.Open mSql, cn, adOpenForwardOnly
'---
Worksheets("Sheet2").Range("A1").CopyFromRecordset rs
cn.Close
Set cn = Nothing
Set rs = Nothing
End Sub
'ーーー
結果
Sheet2の A1:C2に
5永田50
7三村50
第1行に、見出し「番号氏名点数1」を出したいなら
第1行のA1:C1に「番号氏名点数1」をコピー貼り付けして置き、
Worksheets("Sheet2").Range("A1").CopyFromRecordset rs
のA1をA2にすればよい。
フィールド名をADO側で左列からF1,F2,F3のように名付けてくれるという
仕組みがあり、それを使って簡略化したもの。
フィールド名を自分流に定義するのは、Iniファイルというものを使えばできるようだが、面倒なので使わない。
詳しくはGoogleででも、「ADO iniファイル」で照会するなどして、勉強してください。

投稿日時 - 2015-12-10 22:36:52

お礼

ありがとうございます。参考にさせていただきます。

投稿日時 - 2015-12-12 13:51:07

あなたにオススメの質問