ExcelVBAを使ったCSVデータの読込-複数テーブル結合編-

VBA
スポンサーリンク

前回、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入門 技術の泉シリーズ
スポンサーリンク

まとめ

  1. ADODB.Connectionでフォルダに接続(フォルダパスを指定)
  2. ADODB.Recordsetでデータベースを読込(ファイル名を指定、SQL活用)

前回記事の補足として、2つ以上のCSVを結合するVBAコードを紹介しました。参考にしてみてください。

コメント

タイトルとURLをコピーしました