- ベストアンサー
EXCELでSQL構文利用の方法
EXCEL-VBAで、WHERE文での、コンボボックスの値の取得方法がよく分かりません。回答集に似たような質問がありましたが、基礎が無い為、前に進めません。都合のよい事を申しますが教えてください。 Sub テスト2( ) Dim objcon As ADODB.Connection Dim objrs As ADODB.Recordset Dim i As Integer Set objcon = New ADODB.Connection Set objrs = New ADODB.Recordset objcon.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & "\process.mdb" With objrs .ActiveConnection = objcon .Source = "select * from 002顧客名 where 県名 = Worksheets[sheet1!].ComboBox1.Text;" 'コンボボックスの値の取得ができません .Open End With For i = 1 To objrs.Fields.Count Cells(1, i).Value = objrs.Fields(i - 1).name Next Range("a30").CopyFromRecordset objrs objrs.Close objcon.Close End With これ以下で、変数宣言するには、何が足りないのか教えてください objcon.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & "\process.mdb" Dim name As Variant name = Worksheets("sheet1").ComboBox1.Text With objrs .ActiveConnection = objcon .Source = "select * from 002顧客名 where 県名 = name;" .Open End With 以上、なにとぞご指示をお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Dim code As Variant Dim mmcode As Variant mmcode = Worksheets("sheet1").Range("b19").Text code = "'" & mmcode & "%' " '大阪を含むデータ検索 With objrs .ActiveConnection = objcon .Source = "select * from 003業務コード where 顧客名 like " & code & ";" .Open です。
その他の回答 (4)
- o_chi_chi
- ベストアンサー率45% (131/287)
#3です。 デバッグ方法も調べてみてください。 1.Debug.Printを利用する 2.ブレークポイントを利用する 3.クイックウォッチを利用する など組み合わせて利用すればエラー個所が 特定しやすくなります。
- o_chi_chi
- ベストアンサー率45% (131/287)
順序だてて考えてみてください。 code変数に'大阪*'をいれたいと仮定します。 (アクセスの任意の文字は*です) code = "'大阪*'" 大阪を変数に変えたい場合 code = "'" & "大阪" & "*'" code = "'" & mmcode & "*'" となりますね。 ただSQL文のほうで''は指定していますので結局 code = mmcode & "*" でいいかと思います。
お礼
お返事が送れ申し訳ありませんでした。このご回答をいただいてから、変数とテキストのくぎり方を、もう一度整理し直しました。 基礎が無いから、書籍や皆さんのアドバイスを参考に、必要なエッセンスだけを積み上げて前に進むこの方法は、けして良いことではないのはわかっているのですが、限られた時間の中、前に進むため日々もがいております。でもこのプログラムの世界は、とりあえず保留にして前に進むということが難しく(デバックで一切前に進めない)、またプログラムは、技術と同時にデザインでもあり、事務系の情報収集と違い、参考事例を参考にするのが難しい。苦労しますが、これができれば、日常業務が改善できるので、何とか頑張って行きます。これからもご教授お願いします。
- o_chi_chi
- ベストアンサー率45% (131/287)
#1です。 あと 1.nameはstring型で宣言するほうがいいかと。 (variantでも間違いではないですが) 2.SQL文でnameは変数なので""の外に出さないとだめです。 "select.* from 002顧客名 where 県名 = '" & name & "';"
補足
ご回答ありがとうございました。下記の内容で変数宣言ができました。 objcon.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & "\process.mdb" Dim code As Variant code = "大阪" & "%" '大阪を含むデータ検索 With objrs .ActiveConnection = objcon .Source = "select * from 003業務コード where 顧客名 like '" & code & "';" .Open end With 今度は、変数「code」の”大阪 ”の部分をコンボボックスから取得できるように現在格闘中です。 とりあえず、セルの値取得からと思い、下記のとおりコードを書いたら Dim code As Variant Dim mmcode As Variant mmcode = Worksheets("sheet1").Range("b19").Text code = "'& mmcode &' " & "%" '大阪を含むデータ検索 With objrs .ActiveConnection = objcon .Source = "select * from 003業務コード where 顧客名 like '" & code & "';" .Open エラ-メッセージ「1つ以上の必要なパラメ-ターの値が設定されていません」といわれました。 どんどん深みにハマっていきます。 (簡単にできると思うのが間違いなのですけどね) また、アドバイスお願いいたします。。
- o_chi_chi
- ベストアンサー率45% (131/287)
コンボボックスにこだわる必要はありません。 結局選択された値はセルに入ります。 name=Worksheets("sheet1").cells(r,c).value でいいと思います。
お礼
アドバイス、ありがとうございます。 私の構文中で、何かが足りないらしく、変数としては取得できませんでした。 今後も、色々試してみようと思います。
お礼
ご回答頂きありがとうございます。やっと前に進むことができそうです。本当に助かりました。 comboboxの値を直接取得して、次のcomboboxの値の検索条件にしたかったのですが、とりあえず、comboboxのテキストをセルに転記させ、その値を参照して検索抽出をさせることにします。combobox軍団を力技で積み上げて入力システムを作り、後からサブルーチンを利用できるか検証してみます。 変数mmcodeの値を指定した後、変数codeの宣言時にmmcodeをテキスト扱いするというのが、ポイントのようですね。 mmcode = Worksheets("sheet1").Range("b19").Text code = "'" & mmcode & "%' " '大阪を含むデータ検索 変数宣言したものを、テキストとして扱わなければならない。でも次の1行 Source = "select * from 003業務コード where 顧客名 like " & code & ";" では、テキスト扱いをしていない。このあたりのルールがわからないのですが、参考事例として記録し、今後類似状態時のエラー発生時の対処法の選択枝として記憶しておくことにします。 最初は、comboboxにアルファベットを追加入力する毎にその条件を満たすデータを絞り出し抽出表示させ、そのデータを直接comboboxのリストにしたかったのですが、背伸びしすぎのようです。 また、ご質問させていただくことがあると思います。これからもアドバイスよろしくお願いいたします。