このコードの1行目には配列の要素数を3と指定し、2行目で配列番号3を指定しています。コードだけを見ると要素数と最大要素番号がずれていることに気が付かないことがあります。大事なことなので繰り返し書きますが、配列が0開始ということは、配列の最後の番号が要素数から1引いた数ということであることを覚えておきましょう。その知識が身についていれば本件エラーに遭遇する機会は随分減るはずです。ここがこのエラー発生の根本原因だということを知っているのといないのとではコードの精度は違ってきます。結果的にループ終了条件の誤りが減り、このエラーの回避になります。一度でいいのでサイトや本を見るだけでなく、自分で配列の絵と各要素の番号の絵を書いてみることをお勧めします。配列の最後の要素と配列の要素数の関係を確認しましょう。その一度が今後の配列の理解に大きく役立ちます。以上が本件エラーの根本原因の説明です。以下はエラー自体についての説明をします。インデックスが有効範囲にありません。」というエラーになることがあります。エラーの原因は、配列の最大要素を超えた要素にアクセスすることがエラーの原因です。日曜日から土曜日までの7日間の配列を用意する場合、配列の要素は7つの領域を用意することになります。ところが誤って6つしか領域が用意されていない状態の場合に、7つ目の領域にアクセスするとエラー9になります。Sub上のコードは設定時のエラーの例ですが、配列の値を参照しようとした場合もエラーになります。エラーの対応方法エラーの対応方法は、配列設定時や参照時のループ終了条件を正しく設定することでほとんど解決します。Each構文を使うのが分かりやすくていいと思います。UBoundでの書き方12行目で要素数を取得し、それを15行目のForループで使用する方法です。Eachで配列の各要素値を取得する方法です。この方法が一番簡単です。SubDoループなどの終了条件がないループ構文での書き方Doループなどの終了条件がないループ構文を使う場合は、配列処理を行う前に終了条件を書くようにする、などのルールを決めておくとよいです。EachやFor文で書いた方が確実です。してもDoループなどを使う必要がある場合は、終了条件をどこに書くかを自分の中で決めておいた方がよいです。考えなければなりません。私は「終了条件はループの先頭に書く」と決めています。例外はありますが、基本的なルールを決めておいた方が本件エラーに悩まされることは少なくなります。ブロック変数が設定されていません。Excel作業をVBAで効率化シェアお問合わせTOPへ。