以下のコードで、CSVファイルを開き、配列に格納した後で、所定の配列の要素をエクセルに転記するというマクロを組んでいるのですが、何故か以下のエラー発生個所で必ずn=5の時にインデックスが有効範囲にありませんというエラーが発生してしまいます。
読み込むCSVファイルは一部空白などもありますが、n=4までは問題なく読み込めていますし、他のcsvファイルを作成して読み込ませても同じ場所(N=5)でエラーがでます。
最初は配列のサイズを定義してから読み込みをしておりましたが、動的配列の処理が問題かと思い、都度配列を定義しなおすようにコードを修正してもなお、エラーが治りません。
エラーの修正方法をご教示くださいませんでしょうか。
よろしくお願いします!
Sub import_Sales_Data()
Dim tFolder, tFile
Dim ws As Worksheet
Dim lastRow As Long
Dim max_n As Long
Dim buf As String, tmp As Variant, ary() As Variant
Dim i As Long, n As Long, val As Long
tFolder = ThisWorkbook.Path & "\データ\"
tFile = Dir(tFolder & "〇〇.csv")
Set ws = Worksheets("〇〇")
lastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
max_n = CreateObject("Scripting.FileSystemObject").OpenTextFile(tFile, 8).Line 'ファイルの行数取得
Dim max_items As Long
'MsgBox tFile
Open tFile For Input As #1
Line Input #1, buf
max_items = UBound(Split(buf, ","))
Close #1
ReDim ary(0 To max_n, 0 To max_items) As Variant
n = 0
Open tFile For Input As #1
Do Until EOF(1)
Line Input #1, buf
If buf <> "" And n <= max_n Then
tmp = Split(buf, ",")
If n > UBound(ary, 1) Then
ReDim Preserve ary(0 To n, 0 To max_items) As Variant ' 配列の再設定
End If
For i = 0 To UBound(tmp)
ary(n, i) = tmp(i) 'ここでエラーが発生
Next i
MsgBox n
End If
n = n + 1
Loop
Close #1
For i = 0 To max_n
ws.Cells(lastRow + i + 1, 7).Value = ary(i, 0)
ws.Cells(lastRow + i + 1, 4).Value = ary(i, 1)
ws.Cells(lastRow + i + 1, 5).Value = ary(i, 2)
ws.Cells(lastRow + i + 1, 8).Value = ary(i, 3)
ws.Cells(lastRow + i + 1, 6).Value = ary(i, 4)
ws.Cells(lastRow + i + 1, 11).Value = ary(i, 5)
ws.Cells(lastRow + i + 1, 12).Value = ary(i, 6)
ws.Cells(lastRow + i + 1, 9).Value = ary(i, 7)
ws.Cells(lastRow + i + 1, 10).Value = ary(i, 8)
ws.Cells(lastRow + i + 1, 20).Value = ary(i, 9)
ws.Cells(lastRow + i + 1, 21).Value = ary(i, 10)
ws.Cells(lastRow + i + 1, 14).Value = ary(i, 11)
i = i + 1
Next i
End Sub