📘 Excel逆引き事典

【VBA】CSVファイルを開かずに(外部参照で)コピーする方法

日々の業務では、大量のデータを扱うことが多く、その中でも特にCSVファイルの処理は手間がかかることが多いです。しかし、VBAを使用すれば、CSVファイルを開かずに直接参照してコピーすることが可能となります。この記事では、効率的な業務遂行のために、CSVファイルを外部参照でコピーする方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub CopyFromCSV()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("目的のシート名")
    
    ' CSVファイルへのパスを指定
    Dim csvPath As String
    csvPath = "C:\path\to\yourfile.csv"
    
    ' CSVファイルを開かずに読み込む
    Dim data As Variant
    data = GetCSVData(csvPath)
    
    ' データのコピー先を指定
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
    
    ' CSVデータをシートにコピー
    For i = LBound(data) To UBound(data)
        ws.Range("A" & lastRow + i - LBound(data)).Value = data(i, 1)
        ws.Range("B" & lastRow + i - LBound(data)).Value = data(i, 2)
        ' 必要に応じて、他の列もコピー
    Next i
End Sub

Function GetCSVData(ByVal filePath As String) As Variant
    Dim fileNum As Integer
    Dim line As String
    Dim lines() As String
    Dim data() As Variant
    
    ' ファイルを開く
    fileNum = FreeFile
    Open filePath For Input As #fileNum
    
    ' CSVファイルを1行ずつ読み込む
    Do Until EOF(fileNum)
        Line Input #fileNum, line
        lines = Split(line, vbTab) ' タブ区切りの場合
        ReDim Preserve data(UBound(data) + 1)
        data(UBound(data)) = lines
    Loop
    
    ' ファイルを閉じる
    Close #fileNum
    GetCSVData = data
End Function

よくある質問

Q 元に戻せますか?

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

Q エラーが出たら?

A.
シート名や列番号が正しいか確認してください。また、CSVファイルへのパスも正しく指定されているか確認してください。