【VBA】フォルダ内のCSVファイルを一度で読み込むプログラム
製造機械や評価設備を扱っていると、CSVファイルを扱うことが多くあると思います。
工学系の大学で実験をしていると、実験結果がCSVファイルで出てくることは多いです。
このCSVファイルですが、数が多いとExcelファイルにまとめるだけで手間がかかったりします。
そこで今回はCSVファイルを一度で読み込むプログラムを紹介します。
1 ファイルを1シートに取り込むので、データ処理に手間がかかると感じたら試してみてください。
フォルダ内のCSVファイルを一度で読み込むプログラム
Sub ReadCsvFiles()
'''フォルダ内のCSVファイルを一度で読み込む
''フォルダパスをダイアログで取得
Dim strFldrPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
strFldrPath = .SelectedItems(1)
Else
MsgBox "キャンセルされました"
Exit Sub
End If
End With
Dim fso As Object, fldr As Object, f As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder(strFldrPath)
'' フォルダ内の各CSVファイルを読み込む
For Each f In fldr.Files
' CSVファイル以外は処理しない
If fso.GetExtensionName(f.Name) <> "csv" Then GoTo Continue
' CSVファイルを新規シートに読み込む
CSVInputWith0 f.Path
Continue:
Next
MsgBox "読み込み完了!"
End Sub
Private Sub CSVInputWith0(strFilePath As String)
'''CSVファイルをアクティブブックの新規シートに読み込む
'TextFileColumnDataTypesプロパティ用の配列作成
Dim arrDT(1 To 100) As Long, i As Long
For i = 1 To 100
arrDT(i) = xlTextFormat 'テキスト形式
Next
'' 新規シート作成
With ActiveWorkbook.Sheets.Add
'クエリテーブル実行
With .QueryTables.Add(Connection:="text;" & strFilePath, Destination:=Range("A1"))
.TextFilePlatform = 65001 'UTF8
.TextFileCommaDelimiter = True
.TextFileColumnDataTypes = arrDT
.Refresh BackgroundQuery:=False
.Delete
End With
End With
End Sub
このプログラムを実行すると、↓のフォルダ選択ダイアログが表示されます。
フォルダを選択すると、フォルダ内のCSVファイルが順番に読み込まれ、アクティブなExcelファイルに取り込まれます。
新しいシートが作成され、1つのCSVファイルが1シートに取り込まれます。
CSVファイルの処理が手間に感じたら活用してみてください。
「フォルダパスをダイアログで取得する方法」と、「CSVファイルを読み込む方法」については別記事にて解説しています。
下記記事をご覧ください。