dポイントプレゼントキャンペーン実施中!

ADOで複数のBookから抽出
することは可能でしょう
例えば
With objCn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "TEXT;HDR=YES;FMT=Delimited"
.Open "C:\Users\Desktop\新しいフォルダー (4)"
End With

With objCn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0"
.Open "C:\Users\Desktop\Test_1.xlsx"
End With

というかんじで

select とかで必要なデータをとりだす

質問者からの補足コメント

  • 挑戦いたましす。

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/01/03 23:21

A 回答 (7件)

趣旨が「1個のクエリで複数のBookから」でなければ、複数のConnectionを使えばいいかと思います。


デスクトップのTest_1.xlsxのSheet1とデスクトップの新しいフォルダー (4)内のtest.csvの最初のレコードのフィールドの値を表示します。

Sub sample()
Dim cnn1 As Object
Dim cnn2 As Object
Dim desktop As String
Dim rs1 As Object
Dim rs2 As Object
Dim i As Integer

Set cnn1 = CreateObject("ADODB.Connection")
Set cnn2 = CreateObject("ADODB.Connection")
desktop = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
Set rs1 = CreateObject("ADODB.Recordset")
Set rs2 = CreateObject("ADODB.Recordset")

With cnn1
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "TEXT;HDR=YES;FMT=Delimited;CSV"
.Open desktop & "新しいフォルダー (4)"
End With
Dim es1 As Object

With cnn2
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0 xml;HDR=YES"
.Open desktop & "Test_1.xlsx"
End With

rs1.Open "SELECT * FROM [test.csv]", cnn1
MsgBox rs1.Fields.Count
For i = 0 To rs1.Fields.Count - 1
MsgBox rs1(i)
Next

rs2.Open "SELECT * FROM [Sheet1$]", cnn2
MsgBox rs1.Fields.Count
For i = 0 To rs1.Fields.Count - 1
MsgBox rs1(i)
Next

rs1.Close
rs2.Close
cnn1.Close
cnn2.Close
End Sub





複数のデータベースを1つのクエリで処理する方法は知りませんが、このVBAがAccessのVBAか、Accessが使える状況のExcelなどのVBAなら、Accessのデータベースにリンクテーブルとして登録すれば、同一データベース内のテーブルとして処理できると思います。
    • good
    • 0

No.5です。



その後も調べては見ましたが、結局複数のBookに1つずつ接続しても複数の配列を作り比較する手間が出来るだけでしょうね。

>1回のSQL発行で複数のブックからの情報を得たいということです。

素直に複数を1つに纏めるか、あるいは私は古くて機能を持ってませんが『PowerQuery』とか言うのが2010以降だったかには追加されてるようなので、
それで出来るかどうかでしょうかね。
出来ないようであればExcelでは困難と思えます。

そもそも複数Bookと言ってもその中には複数のSheetが存在している仮定になってますので、そこまでやるなら『DBMS使ってよ』とか制作者は言いそう。
(例えばAccessとかSQLServerなどですかね。)
    • good
    • 0

No.3です。



No.4での回答方法で解決出来るのかも知れませんが、私個人はそれをコード作成出来ないのとBookの破損を恐れて1つのBookへの集約を提案してます。
あとは実際にコード化出来る方がいらっしゃれば一発解決かもですね。
うちのは古いバージョンなので今ので動かなければ時間の無駄ですし。
最近のをお持ちの方にお任せします。

>最終的にどのような

多分最終目標という事よりExcelVBAでどんな事が出来るのか『ピンと来たら質問する』と言う感じに思いますよ。
    • good
    • 0
この回答へのお礼

いつも有難うございます。
わたしもいろいろ検索したところ
見つかりませんでした。

お礼日時:2019/01/03 23:19

No.2です。


過去の質問は把握していないため、最終的にどのようなことを行いたいのか不明で的外れかもしれませんが……

使用者側からみて、1回のSQL発行で複数のブックからの情報を得たいというのであれば、その様な機能をもったFunctionプロシージャなりクラスなりを定義すれば良いのではないでしょうか?

SQLとブック名のリストを引数にして渡して、内部で各ブックに対しADO接続して情報取得したのち、まとめて呼び出し元へ返せば、機能としては要望に沿うと思います。
    • good
    • 0
この回答へのお礼

1回のSQL発行で複数のブックからの情報を得たい
ということです。

お礼日時:2019/01/03 23:20

No.1です。



No.2さんへ
1つのブックの1つのシートへの接続はだいぶ前に質問者さんが立てた質問にリンク先のコードに似たものを回答しています。
多分質問者さんはその辺は既にご存じで今回の複数ブックへの接続に関する質問をお立てになったと思います。
あとはフォルダ内に『複数のCSVファイル』にすれば可能かも知れませんけど。(未検証ですが記事は見かけたような)
    • good
    • 0
この回答へのお礼

有難うございます。

お礼日時:2019/01/03 23:20

↓で、できませんか? 未検証なのでExcelのバージョンが異なる場合には手直しが必要になるかもしれません。



https://www.akiratin.com/excel-vba%E3%81%A7sql%E …

ただ一回で複数のブックから一括でデータを取得するのは無理だと思います。
一度にひとつずつブックを接続していくしかないですね。
この回答への補足あり
    • good
    • 0

数日検索してみましたけど正攻法がないのか見つかりませんでした。



ただ見つけたのはAccessに各Bookをリンクテーブル(?)して、Accessに対して処理を行なうような感じでしたね。
>>>>見つけたのに見失ってしまいました。

どうしてもExcelでって事であれば一時的にしろ必要な各BookのSheetを1つのブックに集約するしかないのかもですね。
    • good
    • 0
この回答へのお礼

数日検索してみましたけど正攻法がないのか見つかりませんでした。
わたしもおなじく。
ありがとうございました。

お礼日時:2019/01/03 23:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A