「csvファイル」を「二次元配列」に入れる。区切り文字を、カンマ以外にも対応

区切り文字が、カンマの時のマクロは、以下を参照してください。

区切り文字がカンマ以外にも対応できるマクロは、以下です。

'*******
'* csvファイルを二次元配列に入れる。20240509改造。
'* csvFile:csvファイル名、フルパス
'* arr:出力される配列は、参照渡し。配列は、モジュールレベル変数としている。
'* delimiter:区切り文字。デフォルトで、","カンマ区切り。vbTabでタブ区切りに変更可能。
'* 文字コードは、「Shift_JIS」対応。途中の改行には、対応していません。
Private Sub csv_to_array(ByVal csvFile As String, ByRef arr As Variant, Optional ByVal delimiter As String = ",")
    'CSVファイルのパスを指定
    Dim filePath As String
    filePath = csvFile
    
    'CSVファイルを開く
    Open filePath For Input As #1
    
    '配列を宣言
    Dim dataArray() As String
    Dim rowCount As Integer
    Dim colCount As Integer
    
    'CSVファイルからデータを読み込む
    Dim i As Integer
    Dim line As String
    i = 1
    Do Until EOF(1)
        Line Input #1, line
        
        '最初の行の場合、列数をカウントする
        If i = 1 Then
            colCount = UBound(Split(line, delimiter)) + 1 '区切り(demilter)で分割して、配列の上限を取得
        End If
        
        '行数をカウントする
        rowCount = rowCount + 1
        
        ' 行列を逆の配列を作成。ReDimは、1行づつの追加ができないため
        '配列をリサイズしてデータを格納する
        ReDim Preserve dataArray(1 To colCount, 1 To rowCount)
        Dim j As Integer
        For j = 1 To colCount
            dataArray(j, rowCount) = Split(line, delimiter)(j - 1) '配列にデータを格納する
        Next j
        
        i = i + 1
    Loop
    
    'CSVファイルを閉じる
    Close #1
    
    ' 行列変換関数を使用
    arr = TransposeArray(dataArray)
    
End Sub

' 配列の行列変換
Function TransposeArray(ByVal myArray As Variant) As Variant
    Dim x As Long, y As Long
    Dim maxX As Long, minX As Long
    Dim maxY As Long, minY As Long
    
    Dim tempArr As Variant
    
    '上限と下限を取得
    maxX = UBound(myArray, 1)
    minX = LBound(myArray, 1)
    maxY = UBound(myArray, 2)
    minY = LBound(myArray, 2)
    
    '一時的な配列を作成する
    ReDim tempArr(minY To maxY, minX To maxX)
    
    '配列の行列変換
    For x = minX To maxX
        For y = minY To maxY
            tempArr(y, x) = myArray(x, y)
        Next y
    Next x
    
    '出力配列
    TransposeArray = tempArr
    
End Function

このマクロは、デフォルトでカンマ区切り対応ですが、その他の区切り文字の場合、3つ目の引数に指定することで、カンマ以外の区切り文字に対応しました。以下が、区切り文字をタブに指定した使用例です。

Dim arr() As Variant

Private Sub テスト、CSVファイルを二次元配列に()
    Call csv_to_array(ThisWorkbook.Path & "\sample8.csv", arr, vbTab)
End Sub

他の区切り文字、例えば、セミコロン”;”の場合も、以下で対応可能です。

Private Sub テスト、CSVファイルを二次元配列に()
    Call csv_to_array(ThisWorkbook.Path & "\sample_semi.csv", arr, ";")
End Sub

以下の関数は、

' 配列の行列変換
Function TransposeArray(ByVal myArray As Variant) As Variant

以下を参考にしてください。

Follow me!