朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら
エクセルVBA CSVを読み込む汎用的な関数





エクセルのVBAでの汎用的なCSVを読み込む関数を作ってみました。
readCSVwithDoubleQuatation関数は、”で囲まれていて、カンマで区切られているCSV用の関数です。
readCSVwithSingleQuatation関数は、’で囲まれていて、カンマで区切られているCSV用の関数です。
readCSVwithNoQuatation関数は、カンマで区切られているだけのCSV用の関数です。
analyseCSV関数はCSVファイルを読み込むためのメインの処理の関数です。
CSVファイルをただ読み込むならエクセルで開くのが簡単ですが、ただ読み込むだけではなく、読み込んだ時に何かしらの処理をしたい場合にひな形になるVBAです。
analyseCSV関数の中の「'do something」の所で処理したい内容を書き込む
とよいと思います。
なお、読み込んだデータは表示されているシートに読み込まれます。



Option Explicit
'カンマで区切られて、各データが"(ダブルクォーテーション)で囲まれているファイル用
Public Sub readCSVwithDoubleQuatation()
    Dim FD As FileDialog, f As Variant
    Set FD = Application.FileDialog(msoFileDialogOpen)
    With FD
        With .Filters
            .Clear
            .Add "テキストファイル", "*.csv;*.txt", 1
            
        End With
        
        If .Show = True Then
            Debug.Print .SelectedItems(1)
            
            Call analyseCSV(.SelectedItems(1), """")
            
        End If
    End With
    
End Sub

'カンマで区切られて、各データが'(シングルクォーテーション)で囲まれているファイル用
Public Sub readCSVwithSingleQuatation()
    Dim FD As FileDialog, f As Variant
    Set FD = Application.FileDialog(msoFileDialogOpen)
    With FD
        With .Filters
            .Clear
            .Add "テキストファイル", "*.csv;*.txt", 1
            
        End With
        
        If .Show = True Then
            Debug.Print .SelectedItems(1)
            
            Call analyseCSV(.SelectedItems(1), "'")
            
        End If
    End With
    
End Sub

'カンマで区切られて、各データがクォーテーションで囲まれていないファイル用
Public Sub readCSVwithNoQuatation()
    Dim FD As FileDialog, f As Variant
    Set FD = Application.FileDialog(msoFileDialogOpen)
    With FD
        With .Filters
            .Clear
            .Add "テキストファイル", "*.csv;*.txt", 1
            
        End With
        
        If .Show = True Then
            Debug.Print .SelectedItems(1)
            
            Call analyseCSV(.SelectedItems(1), "")
            
        End If
    End With
    
End Sub

'メインの処理用関数
Private Sub analyseCSV(ByVal fileName As String, ByVal quote As String)
    Dim fileNum As Integer
    Dim buf As String
    'カンマでスプリットした後の配列
    Dim arrLineData() As String
    
    Dim strSplit As String
    'ワークシートの行番号
    Dim row As Integer
    Dim i As Integer
    'くぉーとの長さ
    Dim length As Integer
    
    If fileName = "" Then
        Exit Sub
    End If
    
    'クォーテーションの長さを取得しておく(汎用のため)
    length = Len(quote)
    strSplit = quote & "," & quote
    'ワークシートの行の番号
    row = 1
    '空いているファイル番号を取得
    fileNum = FreeFile
    
    Open fileName For Input As #fileNum
    
    Do Until EOF(fileNum)
        Line Input #fileNum, buf
        '行の最初と最後の囲み文字を削除する処理
        buf = Left(buf, Len(buf) - length)
        buf = Right(buf, Len(buf) - length)
        '1行のデータを各項目に分解する処理
        arrLineData = Split(buf, strSplit)
        
        '何かの処理をしたい場合はここで処理を書き込む
        'do something
        
        'ワークシートのセルに書き込む
        For i = 0 To UBound(arrLineData)
            If quote = """" Then
                arrLineData(i) = Replace(arrLineData(i), """""", """")
            End If
            Cells(row, i + 1) = arrLineData(i)
        Next i
        
        'ワークシートの行番号をカウントアップする
        row = row + 1
    Loop
    
    Close #fileNum
    
End Sub
        








良いやや良い普通やや悪い悪い

投稿日時評価コメント