• ベストアンサー

MySQL + Excel したい!

ExcelのVBAとMySQLを使っていろいろ実験してます。 ひとりでは、どうしても解決に時間がかかったり、分からないことがあるので、分かる方に教えていただけたらと思います。 Excelにデータベースのデータを読み込んだり、Excelで入力したり、計算したしたものを、またデータベースに入力したりしています。どうしても解決したいことが、以下の(1)(2)です。 (1)プログラムの一部ですが、 Set Rs = New ADODB.Recordset sql="select count(*) from yotei" Rs.Open sql, Cn 'Cnはデータベースへの接続 ADODB.Connection Rs.MoveFirst Range("A1").CopyFromRecordset Rs 'いったんワークシートに結果を転送 count = Range("A1").Value 'ワークシートから値を取得 結果のレコードセットから希望の1行1列を取り出す方法でつまづきました。Rs.GetRowsなど使い方が分かりませんでした。 例えばテーブルのレコード数などを調べたときの結果は1行1列しかないんですけど、上を見ての通り、不効率なことをしてしのいでます。 (2)LANでつないだ他のパソコンから、このパソコンのデータベースに接続したいです。何が(どうすることが)必要ですか? 接続文字列 DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=test; UID=root; OPTION=3 のSERVER=のところを変えるだけで済むのでしょうか?これだけではだめですよね?パソコンやLANでどんな設定をしなくてはならないでしょう? 説明が悪かったらごめんなさい。やりたいのにできなくて、かなり悩んでます。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

一般的には、 ある問い合わせをレコードセットでした時、 その件数は、 Rs.RecordCount で調べることができます。 (1)の場合、count(*)で数えているので 結果はレコードが1つしかなくフィールドが1つしかないので Rs.Fields.Item(0) 又は Rs(0) で結果を得ることができます。 GetRowsは複数のレコードを配列で得る方法です。 この場合は、必要ありません。 とりあえず(1)だけ・

hiyo680
質問者

お礼

感激です。今やってみて、できました。 ありがとうございます。 このことに関連することも、しっかり理解したいですが、分かりやすい本などありますか?私は見つけられなかったのです。

その他の回答 (2)

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.3

失礼します。「MySQL」は解りませんが。 (1) >Range("A1").CopyFromRecordset Rs 'いったんワークシートに結果を転送 が解っているなら、 >sql="select count(*) from yotei" これを sql="select * from yotei" とかで試して下さい。 >Rs.GetRows これはExcelの感覚からは行列が逆なので かえって扱いにくいです。 むしろ、行ごとにチマチマ転記する http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_030.html このような方法を覚えた方が応用が利きます。 (このサンプルはMDBです。) (2) まずはコンパネ(管理ツール)の「ODBCデータソース」で 接続を確認(テストができないならMSクエリ等でテスト) した上(認証の登録もすませる)で、 DSN=HOGEHOGE; だけでも良いのではないでしょうか。

hiyo680
質問者

お礼

データベースの接続文字列でDNS=~を特別設定しなくても使えているようです。でもこれも興味があるので、また調べようと思います♪ データベースの操作 楽しいです。賢いなぁと思います(あたりまえ?笑) Excelでないと使えない方法より、いろんなところで応用できそうな方法に興味があったので、上手なSQL文と、上手な取り出し方を求めていました。 いろいろ解説ありがとうございます。

回答No.2

こんにちは。 (1)に関しては回答が出ているので・・・。 SERVERを変えればいいですよ。 それでダメな場合は、ほかの設定を教えてもらわないとわかりません・・・。 とりあえず(2)だけ。 (^^ゞ

hiyo680
質問者

お礼

ありがとうございます。 へぇ それだけなんですね。それは少し安心です。 (まだ複数台で実験できてないです) しかし、SERVERを何に変えるのかが分からないです。IPアドレスでしょうか?それとも”コンピュータ名”でしょうか?

hiyo680
質問者

補足

お礼を書いたあとこれを書いてますが、 あっけないほど簡単にできました。ありがとうございました。

関連するQ&A