• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA インデックスが有効範囲にない)

Excel VBAの実行時エラー:インデックスが有効範囲にない

このQ&Aのポイント
  • Excel VBAを使用してプログラムを作成していますが、「インデックスが有効範囲にありません」というエラーが発生しています。
  • 具体的には、プログラムの一部である「Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value」の行でエラーが発生しています。
  • このプログラムは、DドライブのExcel>sampleフォルダ内にあるエクセルブックの情報を取得し、実行ファイルのSheet1に書き込むものです。しかし、正常に動作しないようです。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

通常はシンプルに 1.ブックを拾う 2.拾ったブックを実際に開く 3.該当のデータを転記する 4.ブックを閉じる 5.繰り返す といった段取りにします。 「開かずにデータを抜き取る」サンプルマクロも検索すればすぐにヒットしますが、ざっとこんな具合です。 sub macro1()  Dim buf As String, cnt As Long  Dim TMP As Variant  Const myPath As String = "D:\Excel\sample\"  buf = Dir(myPath & "*.xls*")  Do While buf <> ""   cnt = cnt + 1   Cells(cnt, 1) = buf   Cells(cnt, 2) = FileDateTime(myPath & buf)   Cells(cnt, 3) = executeexcel4macro("'" & mypath & "[" & buf & "]testdata'!R1C1")   buf = Dir()  Loop end sub 尤も、個人的には cells(cnt,3).formula = "='" & mypath & "[" & buf & "]testdata'!A1" の方が簡単で応用も広いと思いますが。

mezzanine_jog
質問者

お礼

ブックを開かずにデータを取る方法まで教えていただき助かりました。 お蔭様でシンプルな手順を踏んだ方法でもプログラムを作ることが出来 活用させていただいてます。 回答いただきありがとうございました。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

SET TMPの行でセル指定まで行ってるけど、 まだ開いてもいないBook・Sheetは利用できません。 段階を踏んで下さい。

mezzanine_jog
質問者

お礼

段階を踏んで動かせるようになりました。 回答いただきありがとうございました。

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.1

> Dim buf As String > buf = Dir(Path & "*.xls*") bufはStringで何文字入りますか。 "*.xls*"でファイル数はいくつあり、何文字になりますか。 この場合に複数のファイルはどの様にbufに格納されるか判りますか。 この辺り(文字数)が範囲を越えているかどうか確かめてみてください。

mezzanine_jog
質問者

お礼

文字数等範囲のこと知りませんでした。 勉強します。 回答いただきありがとうございました。