【VBA】CSVファイルを配列を使って高速に別ブックとして保存する方法
手作業で大量のCSVデータをExcelブックに移行するのは大変な作業です。この記事では、配列を使用して高速にCSVファイルを別ブックとして保存する方法を紹介します。
サンプルコード
VBA
Option Explicit
Sub CSVToArrayAndSaveAsBook()
Dim ws As Worksheet, wb As Workbook
Dim csvFilePath As String, newWorkbookPath As String
Dim data() As Variant
Dim lastRow As Long, i As Long
' CSVファイルのパスを指定
csvFilePath = "C:\Users\User\Documents\example.csv"
' 新しいExcelブックの保存先を指定
newWorkbookPath = "C:\Users\User\Documents\output.xlsx"
' CSVデータを配列に読み込む
data = ReadCSVToArray(csvFilePath)
' 新しいワークブックを作成
Set wb = Workbooks.Add
Set ws = wb.Sheets(1)
Application.ScreenUpdating = False
For i = 1 To UBound(data, 1)
ws.Cells(i, 1).Resize(1, UBound(data, 2)).Value = data(i, 1) ' データをシートに書き込む
Next i
' 新しいワークブックを保存
wb.SaveAs newWorkbookPath
Application.ScreenUpdating = True
End Sub
' CSVファイルから配列に読み込む関数
Function ReadCSVToArray(filePath As String) As Variant()
Dim fileNum As Integer, lineData As String
Dim data() As String, tempRow() As String
Dim i As Long, j As Long
' ファイルを開く
fileNum = FreeFile
Open filePath For Input As #fileNum
ReDim data(1 To 1, 1 To 256) ' 初期化
i = 0
Do While Not EOF(fileNum)
Line Input #fileNum, lineData
tempRow = Split(lineData, ",")
For j = LBound(tempRow) To UBound(tempRow)
data(i + 1, j + 1) = tempRow(j)
Next j
i = i + 1
Loop
ReDim Preserve data(1 To i, 1 To UBound(data, 2))
ReadCSVToArray = data
End Functionよくある質問
Q 元に戻せますか?
A.
VBAの実行結果は「元に戻す」が効きません。必ずバックアップを取ってから実行してください。
Q エラーが出たら?
A.
CSVファイルのパスや列番号が正しいか確認してください。