• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:”インデックスが有効範囲にありません”と言われます)

インデックスが有効範囲にありませんと言われる理由とは?

このQ&Aのポイント
  • VBAで複数のCSVファイルからデータを読み込み、1つのシートに結果を書き込みたい場合、インデックスが有効範囲にないエラーが発生することがあります。
  • このエラーは、ファイルを開く際に与えられるインデックスがシート数の範囲外になっているために発生します。
  • 具体的には、1から100までの番号を持つCSVファイルを順に開いてデータを取得しているプログラムで、CSVファイルの数が100を超えるとエラーが発生します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは 配列は Dim a(1 To 12) As Long としてもいいかと思いますが、コード全体として Sub test()   Dim fileNames As Variant   Dim a As Workbook   Dim lp As Integer   fileNames = Application.GetOpenFilename(MultiSelect:=True)   Application.ScreenUpdating = False   With ThisWorkbook.Worksheets("Sheet1")     If IsArray(fileNames) = True Then            For lp = 1 To UBound(fileNames)         Set a = Workbooks.Open(fileNames(lp))         .Cells(lp, "B").Resize(, 12).Value _           = WorksheetFunction.Transpose( _               a.Worksheets(1).Range("BF5").Resize(12).Value)         .Cells(lp, "N").Value _           = WorksheetFunction.Sum(.Cells(lp, "B").Resize(, 12)) / 12         .Cells(lp, "O").Value _           = WorksheetFunction.Max(.Cells(lp, "B").Resize(, 12))         a.Saved = True         a.Close False       Next     End If   End With   Application.ScreenUpdating = True End Sub これ位でも良いのでは? CSVファイル名が本当に1.csvから100.csvなら、ファイル名で指定して開いて 処理した方がいかと思います。

ymstakk
質問者

お礼

本当にありがとうございました。おかげさまでがんばって修正をしたら回るようになりました。1-100のファイルが入ったフォルダが何個かあったので、一気に回すことを考えていました。

その他の回答 (1)

回答No.1

>Dim a(12) As Long 上記のように宣言した場合、初期状態では、a(0)~a(11)が「有効なインデックスの範囲」になります。 なので a(12) = 0 を実行した瞬間に「インデックスが有効範囲にありません」になります。 配列の要素番号を「1から」にしたい場合は、VBAの1行目に Option Base 1 の行を追加して下さい。 すると、a(1)~a(12)が「有効なインデックスの範囲」になります。

ymstakk
質問者

お礼

本当にありがとうございました。おかげさまでがんばって修正をしたら回るようになりました。

関連するQ&A

専門家に質問してみよう