前回、ADO(ActiveX Data Objects)とSQLを使ったCSVファイルの読込の基本方法について紹介しました。
ExcelVBAを使ったCSVデータの読込-ADO編-
ADO(ActiveX Data Objects)とSQLを使ったCSVファイルの読込の基本方法について紹介します。
今回はフォルダ内の複数のCSVデータ(テーブル)を結合して集計する方法を補足的に紹介します。
全体の流れ
フォルダに格納されている複数のCSVデータをExcelファイルに読み込みます。
フォルダへの接続とファイルのデータの読込にADOを使用します。
詳細
「CSVデータ」フォルダの中に「くだもの」「やさい」「文房具」のCSVファイルがあります。
CSVファイルには簡単な表(テーブル)があります。以下は文房具.csvとやさい.csvの内容です。
今回は上記2つのテーブルをSQLで読み込んで、集計して、Excelファイルの「OUTPUT」シートに出力します。
実際に操作したい方はこちら→サンプルデータ
コード全体
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ファイルをファイルダイアログオブジェクトを使って選択します。
VBAファイルを開く方法まとめ②
Application内のFileDialogオブジェクトについて、プロパティ、メソッドの活用方法をコードを使って紹介しています。
前回の記事のとおり、ADODB.Connectionでフォルダに接続します。そのためにフォルダパスが必要になります。そのためのコードが以下になります。
Fldname = Fldname & "\"
SQL
sqlStr = "SELECT * FROM 文房具.csv " & _
"union " & _
"SELECT * FROM やさい.csv " & _
"ORDER BY 個数 DESC"
変数sqlStrにSQLコードを格納します。(文房具.csvとやさい.csvのテーブルを個数カラムで降順に設定した集計)
【参考書籍】
CSVファイル読み込みで学ぶExcel VBA ADO入門 技術の泉シリーズ
まとめ
- ADODB.Connectionでフォルダに接続(フォルダパスを指定)
- ADODB.Recordsetでデータベースを読込(ファイル名を指定、SQL活用)
前回記事の補足として、2つ以上のCSVを結合するVBAコードを紹介しました。参考にしてみてください。
コメント