📘 Excel逆引き事典

【VBA】CSVファイルを開かずに配列に格納する方法

手作業でCSVデータを取り扱うのは時間がかかります。この記事では、VBAを使ってCSVファイルを直接開かずに配列に読み込む方法を紹介します。これにより、業務効率が大幅に向上します。

サンプルコード

VBA
Option Explicit
Sub CSVToArray()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    'CSVファイルのパスを指定
    Dim csvPath As String
    csvPath = "C:\path\to\yourfile.csv"
    
    'CSVファイルを開かずに読み込む
    Dim fileNum As Integer, lineData As Variant, allLines() As String
    fileNum = FreeFile()
    Open csvPath For Input As #fileNum
    Do Until EOF(fileNum)
        Line Input #fileNum, lineData
        ReDim Preserve allLines(1 To UBound(allLines) + 1)
        allLines(UBound(allLines)) = lineData
    Loop
    Close fileNum
    
    'CSVデータを配列に格納
    Dim dataArray() As String
    Dim i As Long, lastRow As Long
    ReDim dataArray(1 To UBound(allLines), 1 To Split(allLines(1), ",").Length)
    For i = LBound(allLines) To UBound(allLines)
        If i > 1 Then 'ヘッダー行をスキップする場合
            lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
            Dim rowArray() As String
            rowArray = Split(allLines(i), ",")
            For j = LBound(rowArray) To UBound(rowArray)
                dataArray(i - 1, j) = rowArray(j)
                ws.Cells(lastRow, j + 1).Value = rowArray(j)
            Next j
        End If
    Next i
End Sub

よくある質問

Q 元に戻せますか?

A.
VBAの実行結果は「元に戻す」が効きません。必ずバックアップを取ってから実行してください。

Q エラーが出たら?

A.
シート名や列番号が正しいか確認してください。