
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.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のデータベースにリンクテーブルとして登録すれば、同一データベース内のテーブルとして処理できると思います。
No.6
- 回答日時:
No.5です。
その後も調べては見ましたが、結局複数のBookに1つずつ接続しても複数の配列を作り比較する手間が出来るだけでしょうね。
>1回のSQL発行で複数のブックからの情報を得たいということです。
素直に複数を1つに纏めるか、あるいは私は古くて機能を持ってませんが『PowerQuery』とか言うのが2010以降だったかには追加されてるようなので、
それで出来るかどうかでしょうかね。
出来ないようであればExcelでは困難と思えます。
そもそも複数Bookと言ってもその中には複数のSheetが存在している仮定になってますので、そこまでやるなら『DBMS使ってよ』とか制作者は言いそう。
(例えばAccessとかSQLServerなどですかね。)
No.5
- 回答日時:
No.3です。
No.4での回答方法で解決出来るのかも知れませんが、私個人はそれをコード作成出来ないのとBookの破損を恐れて1つのBookへの集約を提案してます。
あとは実際にコード化出来る方がいらっしゃれば一発解決かもですね。
うちのは古いバージョンなので今ので動かなければ時間の無駄ですし。
最近のをお持ちの方にお任せします。
>最終的にどのような
多分最終目標という事よりExcelVBAでどんな事が出来るのか『ピンと来たら質問する』と言う感じに思いますよ。
No.4
- 回答日時:
No.2です。
過去の質問は把握していないため、最終的にどのようなことを行いたいのか不明で的外れかもしれませんが……
使用者側からみて、1回のSQL発行で複数のブックからの情報を得たいというのであれば、その様な機能をもったFunctionプロシージャなりクラスなりを定義すれば良いのではないでしょうか?
SQLとブック名のリストを引数にして渡して、内部で各ブックに対しADO接続して情報取得したのち、まとめて呼び出し元へ返せば、機能としては要望に沿うと思います。
No.2
- 回答日時:
↓で、できませんか? 未検証なのでExcelのバージョンが異なる場合には手直しが必要になるかもしれません。
https://www.akiratin.com/excel-vba%E3%81%A7sql%E …
ただ一回で複数のブックから一括でデータを取得するのは無理だと思います。
一度にひとつずつブックを接続していくしかないですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
Visual Basic(VBA)
-
ADOで現在のレコードの次のレコードの値も取得
Access(アクセス)
-
-
4
エクセルVBAでエラー!
Excel(エクセル)
-
5
[VBA] ADOの Clone と AddNew
その他(プログラミング・Web制作)
-
6
AccessのWHERE句において、変数は使用できますか?
Access(アクセス)
-
7
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
8
オープンしているレコードセットの中の最大値
その他(データベース)
-
9
ADOでNullフィールドの抽出
Visual Basic(VBA)
-
10
アクセスのUserFormにはInitializeはないのでしょうか?
Access(アクセス)
-
11
VBAで複数のCSVからレコードセットを作りたい
Access(アクセス)
-
12
コマンドボタンの画像も拡大表示したい
PowerPoint(パワーポイント)
-
13
Excel 1セル当りの文字数が255文字を超える場合のADOからの取
その他(プログラミング・Web制作)
-
14
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
15
Access ADOで文字列を日付型へinsert
その他(プログラミング・Web制作)
-
16
ADODBでの行番号の取得、もしくはCSVのインポートについて
Visual Basic(VBA)
-
17
アクセス VBAで列の入れ替え データシートビュー
その他(Microsoft Office)
-
18
アクセスでADO 並べ替えが適用できない
Visual Basic(VBA)
-
19
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
20
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBAで別のブックにシートをコピ...
-
エクセルVBAが途中で止まります
-
Excelマクロ 該当する値の行番...
-
別ブックをダイアログボックス...
-
VBSでExcelのオープン確認
-
Excelブックがアクティブになっ...
-
VBA コードを実行すると画面が...
-
Excel マクロ ファイルと同じシ...
-
エクセルのマクロを使ってメー...
-
2つ目のコンボボックスが動作...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA 別ブックからコピペしたい...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
エクセルマクロで、他ブックか...
-
EXCEL VBA で現在開いているブ...
-
[Excel]ADODBでNull変換されて...
-
【Excel VBA】表の列の値毎に分...
-
【Excel VBA】書き込み先ブック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
【Excel VBA】書き込み先ブック...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
[Excel]ADODBでNull変換されて...
-
Excelファイルを開くとき、読み...
-
VBA 実行時エラー 2147024893
-
Excelマクロ 該当する値の行番...
-
Excel にて、 リストボックスの...
-
VBS Bookを閉じるコード
-
複数のエクセルファイルとシー...
-
【ExcelVBA】インデックスが有...
おすすめ情報
挑戦いたましす。