前回、ADO(ActiveX Data Objects)とSQLを使ったCSVファイルの読込の基本方法について紹介しました。
![](https://ym-pc.com/wp-content/uploads/2023/11/ADO-160x90.jpg)
ExcelVBAを使ったCSVデータの読込-ADO編-
ADO(ActiveX Data Objects)とSQLを使ったCSVファイルの読込の基本方法について紹介します。
今回はフォルダ内の複数のCSVデータ(テーブル)を結合して集計する方法を補足的に紹介します。
全体の流れ
フォルダに格納されている複数のCSVデータをExcelファイルに読み込みます。
フォルダへの接続とファイルのデータの読込にADOを使用します。
![](https://ym-pc.com/wp-content/uploads/2023/11/CSV読込_複数-1.png)
詳細
「CSVデータ」フォルダの中に「くだもの」「やさい」「文房具」のCSVファイルがあります。
![](https://ym-pc.com/wp-content/uploads/2023/11/フォルダの中身.png)
CSVファイルには簡単な表(テーブル)があります。以下は文房具.csvとやさい.csvの内容です。
![](https://ym-pc.com/wp-content/uploads/2023/11/出力結果.png)
![](https://ym-pc.com/wp-content/uploads/2023/11/やさいのテーブル.png)
今回は上記2つのテーブルをSQLで読み込んで、集計して、Excelファイルの「OUTPUT」シートに出力します。
![](https://ym-pc.com/wp-content/uploads/2023/11/結合テーブル.png)
![](https://ym-pc.com/wp-content/uploads/2023/11/出力先シート.png)
実際に操作したい方はこちら→サンプルデータ
コード全体
Sub 複数テーブル()
Dim Filepath As String
Dim Fldname As String
Dim Filename As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
Fldname = .SelectedItems(1)
Fldname = Fldname & "\"
Else
Exit Sub
End If
End With
Call ADO接続_2(Fldname)
End Sub
Sub ADO接続_2(ByVal Fldname As String)
Dim Excelversion As String
Dim sqlStr As String
Dim i As Integer
adCon.provider = "Microsoft.ACE.OLEDB.12.0"
adCon.Properties("Extended Properties") = "Text;HDR=Tes"
adCon.Open Fldname
'CSV用SQL文の記載
sqlStr = "SELECT * FROM 文房具.csv " & _
"union " & _
"SELECT * FROM やさい.csv " & _
"ORDER BY 個数 DESC"
adrs.CursorLocation = adUseClient
adrs.Open sqlStr, adCon
Sheets("OUTPUT").Select
Sheets("OUTPUT").Cells.Clear
For i = 0 To adrs.Fields.Count - 1
Sheets("OUTPUT").Cells(1, i + 1) = adrs.Fields(i).Name
Next i
Sheets("OUTPUT").Range("A2").CopyFromRecordset adrs
MsgBox "取込完了", vbOKOnly
adCon.Close
Set adrs = Nothing
Set adCon = Nothing
End Sub
フォルダ選択
Dim Filepath As String
Dim Fldname As String
Dim Filename As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
Fldname = .SelectedItems(1)
Fldname = Fldname & "\"
Else
Exit Sub
End If
End With
こちらでは、読み込むためのCSVファイルをファイルダイアログオブジェクトを使って選択します。
![](https://ym-pc.com/wp-content/uploads/2023/09/アイキャッチ-6506a1e8728bf-160x90.jpg)
VBAファイルを開く方法まとめ②
Application内のFileDialogオブジェクトについて、プロパティ、メソッドの活用方法をコードを使って紹介しています。
前回の記事のとおり、ADODB.Connectionでフォルダに接続します。そのためにフォルダパスが必要になります。そのためのコードが以下になります。
Fldname = Fldname & "\"
SQL
sqlStr = "SELECT * FROM 文房具.csv " & _
"union " & _
"SELECT * FROM やさい.csv " & _
"ORDER BY 個数 DESC"
変数sqlStrにSQLコードを格納します。(文房具.csvとやさい.csvのテーブルを個数カラムで降順に設定した集計)
【参考書籍】
![](https://images-fe.ssl-images-amazon.com/images/I/51y4QJp5YEL._SL160_.jpg)
CSVファイル読み込みで学ぶExcel VBA ADO入門 技術の泉シリーズ
まとめ
- ADODB.Connectionでフォルダに接続(フォルダパスを指定)
- ADODB.Recordsetでデータベースを読込(ファイル名を指定、SQL活用)
前回記事の補足として、2つ以上のCSVを結合するVBAコードを紹介しました。参考にしてみてください。
コメント