EXCEL2003 VBAで2つのDBに接続し、異なるDBのTBLを結合する方法はあるか?

このQ&Aのポイント
  • VBAでDBに接続する際に同時に2つのDBに接続し、1つのSQLで違うDB同士を結合することはできますか?アドバイスをお願いします。
  • ACCESSを介さずにEXCEL2003で2つのDBに接続し、異なるDBのTBLを結合する方法を教えてください。アドバイスをお願いします。
  • EXCEL2003 VBAで異なるDBのTBLを結合する方法を教えてください。2つのDBに同時に接続することは可能でしょうか?
回答を見る
  • ベストアンサー

EXCEL2003 VBAで2つのDBに接続してSQLを実行し、異なる

EXCEL2003 VBAで2つのDBに接続してSQLを実行し、異なるDBのTBLを結合する。 こんな方法あるのかどうかわかりませんが、 VBAでDBに接続する際に同時?に2つのDBに接続し1つのSQLで違うDB同士を任意のキーで結合はできるのでしょうか? どなたかわかる方お願いします。 今考えているのは最初に1つのDBに接続し、データを取得後、再度違うDBに接続し取得したデータを先ほどのデータとVBA内で結合しようと考えています。 ほかにいい方法があればアドバイスおねがいします。 ※今まではACCESSを介してこの処理を行っていましたが引継ぎの関係でEXCELのみでこの処理を  実行しなければなりません。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

DBが違うものを一つのクエリで処理することは できません。Accessではリンクテーブルとして、 処理できますが、これを使わないとなると、まず 無理でしょう。 どちらかのDBをエクスポート→インポートする方が 現実的な解決のように思います。 VBAで1件ずつ処理するのはデータ量が僅少ならば 考える余地はありますが、バグ取りの手間、処理に かかる時間を考えると、やる気がしません。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>2つのDB 質問には大げさにDBと書くのでなく、そのファイルなどのファイル形式を書かないと。 例えばテキストファイルなどなら、相当やさしくなる。 エクセルでSQLを使うといっても、操作では、MSクエリ(データー外部データの取り込みー新しいデータベースクエリ)があるぐらいと思う。 >引継ぎの関係でEXCELのみでこの・・ 相手はエクセル以外は知らないということか。そういうレベルの人には、質問が実現しても、余計難しくなると思うが。相手はVBAは経験あるのか。 エクセルからアクセスを起動して(VBAで)・・のようなのは考慮外か。 エクセルからADOを使って処理するなどはどうか。 こんなところに質問を出す前にGoogleででも「ado エクセル SQL」「ado エクセル 」などの記事を読んだのですか。「エクセル SQL」でも参考になる記事があるようだ。 ーー >VBA内で結合しようと考えています。 これはキーによる「マッチングのアルゴリズム」を使えば出来る。 Googleで「キーマッチング」ででも沢山記事があった http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t33.htm

関連するQ&A

  • 【エクセルVBA】DBのデータをCSVに

    VBA初級者です。 oracleDBのデータをCSVへ出力するマクロをVBAで作成中ですが、実装方法が分からず困っています。 ・DB接続はoo4o ・エクセルは2010 ・SQLで取得したデータを1レコードづつCSVに書き出したい ・カラム名をヘッダーとして書き出したい 以下のような実現方法でできるか…?と考えたものの、 肝心のマクロ(VBA)でのDBデータの取得⇒CSVへの書き込み方法がいくら調べてもわかりません。 CSVからDBへのインポートはたくさんあったのですが…。 そもそも取得したレコードを配列で保持して書き出す、という考え方が合っているのか?ヘッダー(カラム名)はどのように書き出せばいいか? など疑問が尽きません。何卒お力添え頂ければ幸いです。 --ボタンクリック時のアクション-- (1)変数定義 (2)DB接続情報確認 (3)DB接続 'DB接続 Set oraSession = CreateObject("OracleInProcServer.XOraSession") Set oraDatabase = oraSession.OpenDatabase(dbSid, dbUser & "/" & dbPass, ORADB_DEFAULT) (4)書き込み用のCSVファイルを作る (5)SQLを実行し返ってきた結果をsplit関数で配列としてwriteListにAddする (5)作成したCSVファイル内にwriteListのデータをPrint #で書き出す (6)完了メッセージを表示 MsgBox "完了しました " (7)DBの切断 'DBクローズ Set oraDatabase = Nothing Set oraSession = Nothing --SQLを実行するメソッド-- (8)SQLを記述、SELECT結果を(5)に返す 恐れ入りますがよろしくお願いいたします。

  • ストアドプロシージャで別DBに接続

    Oracleのマテリアライズドビューのデータを SQL Server 2008のDBに毎晩取り込む処理を作る必要があり、方法を検討中です。 SQL Serverが稼働しているWindows Server 2003のマシンから、 毎晩タスクで起動させて実行することを考えています。 SQL Serverのストアドプロシージャで実現できないかと考えているのですが、 ストアドプロシージャだけで実現可能でしょうか? Oracleに接続してビューのデータを取得し、それに基づいて、 SQL ServerのDB内のテーブルのデータ追加、更新、削除等を行います。 単純なコピーではなく、データ加工や変換等の処理も行います。 経験がないので、実現可能かというところから教えて下さい。 実現不可能なら、他にどのような選択肢があるか教えていただけると助かります。 よろしくお願いします。

  • EXCELにADOで接続した際のSQLでエラーが出てしまいます(>o<)

    ExcelのワークシートをDBテーブルとして利用しています。 VBAで、ADOを使用してExcelに接続し、SQLでデータを操作したいのですが、3つのテーブルを結合した検索SQLで、 「クエリ式 XXXX の 構文エラー : 演算子がありません。」 というエラーが出てしまいます。 XXXXには、SQL文のJOINしている部分が表示されます。 3つのテーブルのうち、2つのテーブルの結合までは、エラーはなく、結果を取得できます。 テーブルの結合の数やそれ以外に、何か制限があるのでしょうか? ご存知の方がいましたら、ご回答、よろしくお願いします。m(_ _)m

  • PHP+PDO+MYSQL で実行されたSQL文の取得について

    PHP+PDO+MYSQL で実行されたSQL文の取得について PEARのDBからPDOへの移行をしていましてデバック用のSQL文取得で困っています。 $sql = "SELECT * FROM sample where id = ? And id2 = ?" PEARのDBでは $db->query($sql,array(1,5)); $db->last_query; で実行したSQL文を取得することは可能でした。 PDOの場合 $sql_result = $pdo->prepare($sql); $sql_result->execute(array(1,5)); でリプレースフォルダ(クォート処理?)を利用してSQLを実行出来るようですが、 実行したSQLを確認する方法がマニュアル等を読みましたがどうしても分かりません。 どなたかご存知の方がいらっしゃいましたらご教授お願い致します。

    • ベストアンサー
    • PHP
  • VBA 再実行

    エクセルVBAでループによる以下のような定期実行を行っています。 >1時間に一度株価のデータを取りに行きます。 >データ取得後、他のPCに(VBAでソフトを起動させて)アップロードします。 *このアップロードの時に、ソフトが別の処理をしていると起動しません。 VBAで起動はさせるものの、ソフトが実行しないという状態になります。 そこで、一度行った処理を時間をおいて再度実行させたいのです。 できれば、30秒後と1分後に2回再実行するというようにしたいと思っています。 どなたか、お力添え頂けませんか

  • 異なるDBのSQL

    SQLを始めたばかりの初心者です。 oo4oやADOを使用して、オラクルサーバーのデータをSELECT文で オラクル内の複数のテーブルを結合してListViewで表示する プログラムを作成中です。 オラクルサーバーにメインデーターがあり 各クライアントにMDB形式でマスタデータがあります。 MDBのマスタデータにはたとえばですが、テーブル名 [商品テーブル] フィールド名[コードナンバー]、[商品名]... となっており、サーバーには、テーブル名[商品コード]  フィールド名[コードナンバー]、[受注日]....があるとします。 クライアントからoo4oやADOを使用して、サーバーのデータを SELECT文でオラクル内の複数のテーブルを結合して ListViewで表示するのはできます。しかし [コードナンバー]は取得できるのですが、サーバーのテーブルには、 [商品名]がないためとうぜん表示できません。 この場合、オラクルから取得したデータをマスタデータのあるMDBに新しくテーブルを 作りそこに一度格納して再度ADOで結合処理して 商品名を表示する方法しか考えつかないのですが、 ほかに良い方法はありますでしょうか? ADOで接続MDBに保存再度ADOで接続して表示では レスポンスが悪いかなと思いまして... *VB6 winXP-pro オラクル9i

  • アクセスVBAのSQLについて

    (1)テキストファイルに記述したSQL文のセットをVBAで実行するコマンドはありますか? (2)テーブルを作成する際の、DB指定は 「create table "DB名"."テーブル名"…」としたらよいでしょうか (3)"DB名". を省略できるのはどのような場合ですか? (4)Docmd.RunSQL "" で一度に複数のSQL文を実行できますか? よろしくお願いします。m(_ _)m

  • 【エクセルVBA】OraDBのデータをCSVへ出力

    VBA初級者です。 oracleDBのデータをCSVへ出力するマクロをVBAで作成中ですが、実装方法が分からず困っています。 ・DB接続はoo4o ・エクセルは2010 ・SQLで取得したデータを1レコードづつCSVに書き出す ・カラム名をヘッダーとして書き出す 以下のような実現方法でできるか…?と考えたものの、 肝心のマクロ(VBA)でのDBデータの取得⇒CSVへの書き込み方法がいくら調べてもわかりません。 CSVからDBへのインポートはたくさんあったのですが…。 そもそも取得したレコードを配列で保持する、という考え方が合っているのか?ヘッダー(カラム名)はどのように書き出せばいいか? など疑問が尽きません。何卒お力添え頂ければ幸いです。 --ボタンクリック時のアクション-- (1)変数定義 (2)DB接続情報確認 (3)DB接続 'DB接続 Set oraSession = CreateObject("OracleInProcServer.XOraSession") Set oraDatabase = oraSession.OpenDatabase(dbSid, dbUser & "/" & dbPass, ORADB_DEFAULT) (4)書き込み用のCSVファイルを作る (5)SQLを実行し返ってきた結果をsplit関数で配列としてwriteListにAddする (5)作成したCSVファイル内にwriteListのデータをPrint #で書き出す (6)完了メッセージを表示 MsgBox "完了しました " (7)DBの切断 'DBクローズ Set oraDatabase = Nothing Set oraSession = Nothing --SQLを実行するメソッド-- (8)SQLを記述、SELECT結果を(5)に返す 恐れ入りますがよろしくお願いいたします。

  • Excel2002VBA「~のときは○○、そうではないときは何もしない」

    VBA初心者です。環境は、Excel2002で、Windows2000です。 VBAで、下記のようにしたいのですが、どうしてもいい方法を思いつきません。 どなたか、ご指導願います。 マクロ実行時にSheet2があるときは、Sheet2を削除。 ただし、ないときには何もしないで、次の処理へとぶ。 On Error GoTo を利用するのでしょうか? けれど、エラー処理へとんだ場合、どう処理したらいいのか分かりません。 どうぞよろしくお願いします。

  • SQLとVBA

    エクセル上のある2つのセルに年月日をそれぞれ入れ、マクロを実行する(ボタンを押す)と、 外部にあるDB(オラクル)にアクセスしSQLを実行し、セルに入れた日付の範囲内の データをエクセル上に落とすプログラムを組みたいのですが、まったく分かりません。 ちなみに、外部にアクセスすることも出来ますし、SQLで決まった期間のデータを引っ張ることも出来ます。 かなり困っています。教えてください。