• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAでAccessのデータを検索する)

ExcelVBAでAccessのデータを検索する方法

このQ&Aのポイント
  • Excel VBAを使用してADOを介してAccessのデータを検索する方法について教えてください。検索結果をExcelのセルにコピーしたいです。
  • Excel VBAでAccessのデータを検索する際の手順をお教えください。検索結果をExcelのセルにコピーしたいです。
  • Excel VBAを使ってAccessのデータを検索する方法について教えてください。Excelのセルに検索結果をコピーしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

よくわかんないけど、オイラだったら、 findName = ws.Cells(i, 1) & ws.Cells(i, 2) strSQL = "SELECT * FROM PT_MST WHERE S_NUM ='" & findName & "' and FieldName** like '20k%'" rs.Open "SELECT * FROM PT_MST WHERE S_NUM ='" ", db, adOpenForwardOnly, adLockReadOnly do if rs.eof then exit do debug.print rs.Fields(1).Value rst.movenext Loop のように、対象レコードでレコードセットを作るかな。 FieldName** は実際のフィールドネームを使ってください。 

xcode_15
質問者

お礼

ありがとうございます。 結果として次のコードにしました。 'テーブルを開きます findName = ws.Cells(i, 1) & ws.Cells(i, 3) strSQL = "SELECT * FROM PT_MST WHERE S_NUM ='" & findName & "'" rs.Open strSQL, db, adOpenForwardOnly, adLockReadOnly Do If rs.EOF Then Exit Do Debug.Print rs.Fields(1).Value rs.MoveNext Loop

その他の回答 (3)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.4

http://msdn.microsoft.com/ja-jp/library/cc364156.aspx より引用。 <引用1> 注意 Find メソッドを呼び出す前にカレント行の位置が設定されていない場合は、エラーが発生します。Find メソッドを呼び出す前に、MoveFirst などの、行の位置を設定するメソッドを呼び出す必要があります。 <引用2> 比較演算子に "like" を使用する場合、文字列値にアスタリスク (*) を含めると、1 つまたは複数の文字または部分文字列を検索することができます。 <引用おわり> まず、<引用1>に対応できていません。 Do loopの処理をする前に rs.MoveFirst するとどうなりますか? また、<引用2>を参照してほしいのですが、 rs.Find rs.Fields(1).name & " Like '20k%'" は、%がエラーになっているか、「20k%」という文字列を探すだけになります。 (ADOのFILTERと違って、ADOのFINDでは、%は、部分文字列を検索する意図では使えないはず。) rs.Open "PT_MST", ・・・ は、JETでaccessのデータベースを参照しているので select * from PT_MST と同じ動きをしたと思います。 ## なんで、Findを使おうとしているか分りませんので、あえてお薦めはしませんが、 ## Find使うよりFilter使ったほうが、それより、 ## rs.Open でselect文を書いたほうがより使いやすいと思いますが。

xcode_15
質問者

お礼

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

回答No.3

>rs.Open "PT_MST", db, adOpenForwardOnly, adLockReadOnly の"PT_MST"の部分には SQL が入るべきなので、この文がエラーしていそう。 なので、 rs オブジェクトが作成されてないと思われる。 その結果 >rs.Find rs.Fields(1).name & " Like '20k%'"  の rs.Fields(1).name が無効と言われているのではないかな? 他の回答にもあるように do_loop の前に select を投げて、 そのあと、do_loop の中で結果を順に読んでいく様にすべきですね。

xcode_15
質問者

お礼

ありがとうございます。 >do_loop の前に select を投げて、 >そのあと、do_loop の中で結果を順に読んでいく様にすべきですね。 知らなかった。 勉強になりました。 (゜゜)(。。)ペコッ

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

ゴメン、 rs.Open strSQL, db, adOpenForwardOnly, adLockReadOnly だった。

関連するQ&A