質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

4857閲覧

[Excel VBA] 複数のCSVファイルを結合してデータを取り出すプログラム

S.Kasagawa

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/08/05 06:14

現在、Excel VBAで2つの外部のデータベース(今回はCSVファイルとします)を結合して、データを取得、Excelシート内に書き込みを行うプログラムを構築中です。

使用ファイル1:VBA_TEST.xlsm(ファイルパス:C:\Users\User\Desktop\VBA_TEST\VBA_TEST.xlsm)
使用ファイル2:名前.csv(ファイルパス:C:\Users\User\Desktop\VBA_TEST\Child\名前.csv)
使用ファイル3:職業マスター.csv(ファイルパス:C:\Users\User\Desktop\VBA_TEST\職業マスター.csv)

2つのCSVファイルが異なるフォルダーに保存されているため、SQLにて正しくデータベースを取得することができません。
もし、2つのCSVファイルが同じフォルダーの場合は以下のVBAコードで正しく結合することができました。
修正箇所をご教示していただければ幸いです。
よろしくお願い致します。

以下がVBAのコードです。

VB

1Option Explicit 2Sub TestVBA() 3Dim objCn As New ADODB.Connection 4Dim objRS As ADODB.Recordset 5Dim strSQL As String 6 7Dim file_path As String 8file_path = "C:\Users\User\Desktop\VBA_TEST\Child" 9 10'コネクション 11With objCn 12.Provider = "Microsoft.ACE.OLEDB.12.0" 13.Properties("Extended Properties") = "Text;HDR=Yes" 14.Open file_path 15End With 16 17'SQL作成 18strSQL = "" 19strSQL = strSQL & " SELECT" 20strSQL = strSQL & " L.ID, L.名前," 21strSQL = strSQL & " R.職業" 22strSQL = strSQL & " FROM " 23strSQL = strSQL & "名前.csv" & " L" 24strSQL = strSQL & " LEFT OUTER JOIN " 25strSQL = strSQL & "職業マスター.csv" & " R" 26strSQL = strSQL & " ON" 27strSQL = strSQL & " L.職業ID = R.ID" 28 29'SQL実行 30Set objRS = objCn.Execute(strSQL) 31 32'レコードセットをシート出力 33With ThisWorkbook.Sheets(1) 34.Cells(1, 1).CopyFromRecordset objRS 35End With 36End Sub 37

以下がCSVファイルのデータセットです。

「名前.csv」
名前.csv

「職業マスター.csv」
職業マスター.csv

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

IN句を利用するのが手っ取り早い気がします。
以下参考
ADOでの異なる種類のファイルへのSQL (FROM ... IN ... / INTO ... IN ...)

投稿2021/08/05 09:29

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.Kasagawa

2021/08/05 11:51

回答ありがとうございます。 IN句を利用してコードを以下のように書き換えましたが、From句でエラーが起こりました。 IN句の書き方が間違っているのでしょうか。 *参考にした構文 set rs_text = cnn_xl.execute("SELECT * FROM [DATA.txt] IN 'C:\Temp\VBS\Ado\Data\' 'Text;'") 以下、修正したコードの一部を載せます。 ------------------------- ' 修正したコードの一部の抜粋 Dim file_path As String file_path = "C:\Users\User\Desktop\VBA_TEST" 'コネクション With objCn .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Text;HDR=Yes" .Open file_path End With 'SQL作成 strSQL = "" strSQL = strSQL & " SELECT" strSQL = strSQL & " L.ID, L.名前," strSQL = strSQL & " R.職業" strSQL = strSQL & " FROM " strSQL = strSQL & "名前.csv" & " L" strSQL = strSQL & " IN 'C:\Users\User\Desktop\VBA_TEST\Child\名前.csv' 'Test;'" strSQL = strSQL & " LEFT OUTER JOIN" strSQL = strSQL & " 職業マスター.csv" & " R" strSQL = strSQL & " ON" strSQL = strSQL & " L.職業ID = R.ID" -------------------------
guest

0

これで動きませんか?

vb

1Option Explicit 2Sub TestVBA() 3 Dim objCn As New ADODB.Connection 4 Dim objRS As ADODB.Recordset 5 Dim strSQL As String 6 7 'コネクション 8 With objCn 9 .Provider = "Microsoft.ACE.OLEDB.12.0" 10 .Properties("Extended Properties") = "EXCEL 12.0" 11 .Open ThisWorkbook.FullName 12 End With 13 14 'SQL作成 15 strSQL = "SELECT * FROM [TEXT;DATABASE=C:\Users\User\Desktop\VBA_TEST\Child].[名前.csv]" 16' strSQL = "SELECT * FROM [TEXT;DATABASE=C:\Users\User\Desktop\VBA_TEST].[職業マスター.csv]" 17 18 'SQL実行 19 Set objRS = objCn.Execute(strSQL) 20 21 'レコードセットをシート出力 22 With ThisWorkbook.Sheets(1) 23 .Cells(1, 1).CopyFromRecordset objRS 24 End With 25End Sub

参考
EXCELでEXCELファイルおよびACCESSのデータに対してSQLを実行する方法

投稿2021/08/05 12:47

編集2021/08/05 21:35
takanaweb5

総合スコア354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問