スポンサーリンク
前回、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ファイルをファイルダイアログオブジェクトを使って選択します。
前回の記事のとおり、ADODB.Connectionでフォルダに接続します。そのためにフォルダパスが必要になります。そのためのコードが以下になります。
Fldname = Fldname & "\"
sqlStr = "SELECT * FROM 文房具.csv " & _
"union " & _
"SELECT * FROM やさい.csv " & _
"ORDER BY 個数 DESC"
変数sqlStrにSQLコードを格納します。(文房具.csvとやさい.csvのテーブルを個数カラムで降順に設定した集計)
【参考書籍】
前回記事の補足として、2つ以上のCSVを結合するVBAコードを紹介しました。参考にしてみてください。