- ベストアンサー
エクセルからフィルタをかけて該当のレコードの他のフィールドの値を取得する方法
- エクセルからDAOを使用してデータベースに接続し、フィルタをかけて該当のレコードの他のフィールドの値を取得する方法について教えてください。
- 現在のコードではフィルタがかかっておらず、関係のないレコードの値を取得してしまう状況になっています。
- 再度、正しい方法を教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみませんが前回の続きを少し。 確かにAccessからならパスワード付のアクセスに接続できました。 なのでそのときに出来た cn.connectionString をExcelに持って行って試しましたが 『実行時エラー 3001 引数が間違った型、許容範囲外、または競合しています』 であえなく撃沈でした orz http://www.connectionstrings.com/access-2010/ でも 『Note! Reports say that a database encrypted using Access 2010 - 2013 default encryption scheme does not work with this connection string. In Access; try options and choose 2007 encryption method instead. That should make it work. We do not know of any other solution. Please get in touch if other solutions is available!』 ということなので諦めることにします。。。 私はレコードセットの Filter は遅いので実際に使用したことはありません。 WHERE 句 で指定しています。 Set DAOrs = db.OpenRecordset("select * from TPW WHERE サイト名 = 'nanaco'") のように。 レコード数が少なければ運用上問題はなさそうなので、 Set DAOrs = db.OpenRecordset("select * from TPW") DAOrs.Filter = "サイト名 = " & "'nanaco'" ↓ Set DAOrs = db.OpenRecordset("TPW", dbOpenSnapshot) DAOrs.Filter = "サイト名=" & "'nanaco'" Set DAOrs = DAOrs.OpenRecordset() '開き直し DAOrs.MoveLast '以下2行余計ですがレコード数を取得したいときに MsgBox DAOrs.RecordCount MsgBox DAOrs("Password") のようになるかと。 ただ、ここまで書きながら、いまさら言うな!と怒られるかもですが、 良からぬ人がExcelのコードを見てAccessファイルのパスワードを知り悪用・・・ の心配はないですか。 Excel の VBAProjectの保護をクラックする方法がネット上に一杯あります。 Accessファイルを accdb → accde に変換して、 AccessでExcelに書き込むか、Excelで sPWD=inputbox("パスワードは?") Set db = ac.DBEngine.OpenDatabase("PW.accdb", False, True, ";pwd=" & sPWD) のように平文のパスワードは書き込まない方が安全かもです。
その他の回答 (1)
- 30246kiku
- ベストアンサー率73% (370/504)
DAO の Filter とか Sort は、ADO での動き、設定&適用っていう事はなく、 設定してから OpenRecordset して、新しく求める手順だったかと 以下、雰囲気 Dim DAOrs2 As DAO.Recordset DAOrs.Filter = "サイト名 = " & "'nanaco'" Set DAOrs2 = DAOrs.OpenRecordset() ※ DAOrs2 は使わずに、Set DAOrs = DAOrs.OpenRecordset() でも ※ OpenRecordset してから Filter するより、 初めから "select * from TPW WHERE サイト名 = 'nanaco'" で求めた方が速かったかと思います。 ただ、後に DAOrs を使う処理が控えているのであれば、そのままでも
お礼
なるほど! フィルタせずにWHEREしちゃえばいいのですね!うまくできました。 ありがとうございます。
お礼
何度もご回答ありがとうございます。 アクセス→アクセスを試していただいたのですね。 私は英語が全く読めないのですが、リンク先はそういう意味なのですか。 Filter が遅いことも知りませんでした。 >良からぬ人がExcelのコードを見てAccessファイルのパスワードを知り悪用・・・ の心配はないですか。 確かにその可能性もありますね。 考えてなかったです。 >Excel の VBAProjectの保護をクラックする方法 そのような方法があるのですか。 それも知りませんでした。 パスワードの管理にも気を付けます。 ありがとうございました。勉強になりました。