プロが教えるわが家の防犯対策術!

下記のマクロを起動したときにエラーインデックスが有効範囲にありませんというエラーメッセージがでます。 
Sheets("masta").Select
C_COUNT = Sheets("masta").Cells(2, 3).Text
For i = 1 To C_COUNT
M_KAKOBA(i) = i
Next i
For i = 1 To C_COUNT
Sheets("masta").Select
Cells(3, 5) = i
変更したのはSheets("masta")の1列目の9行から2列の11行目にデータをいれました。

A 回答 (3件)

>変更したのは…


とあるので、このマクロはこれまで動作した実績があるものですか?
またマクロの部分だけ掲載していますが変数 M_KAKOBA の定義はどのようになっているのでしょうか?

一般的には
・配列の数よりiの値が大きくなった。
・Option Baseステートメントがないので「Dim a(10)」ではa(0)~a(9)が使用範囲だがa(10)を指定した
などがクサイと思います。
 
    • good
    • 0

こんにちは。



>M_KAKOBA(i) = i

このコードでは、出来ませんね。変数の宣言が書いていないのではっきりしませんが、そのままではエラーが出ます。

また、他のことですが、
C_COUNT = Sheets("masta").Cells(2, 3).Text

ここのテキストプロパティを入れるのも変です。基本的には、.Value プロパティです。

配列変数宣言を、M_Kakoba() としておいて、
C_Count の数を取ったら、

Redim M_Kakoba(C_Count)

に入れます。(ただし、Index の 0 が、Empty になっています。)

変数の定義(Dim)は、きちんと書かないと、いつまでもエラーに悩まされます。

C_COUNT  ←変数は、全部大文字は使わない
M_KAKOBA  ←    ''
C_Count, M_Kakoba と、キャメル型で表記します。大文字は、Const(定数)で書きます。

また、Option Basis 1 は、今後使わない方向にありますので、それは、随時、対処するしかありませんね。
    • good
    • 0

こんにちは。



> Sheets("masta").Select

既回答の配列のミス以外では、シート[masta]にアクセスできないと同様の
エラーになりそうですね。可能性のひとつですが。

Select 文があるところから推測するに、いろいろシート間を飛ぶマクロ
なのではないですか?

例えば、異なるブックをアクティブにした後、シート[masta]のあるブック
をアクティブに戻さないまま

> Sheets("masta").Select

を実行しているとか。

以下は余談です。

ワークシート上のセルの値を使う場合、特にユーザーからの入力値を使う
場合は、どのような値が入力されるか予測できません。

例えば、Sheets("masta").Cells(2, 3) に文字列が入力されていたら?

> C_COUNT = Sheets("masta").Cells(2, 3).Text
> For i = 1 To C_COUNT

上記2行のいずれかでエラーになりそうです。

数値であることを保証しなければならないのですから、きちんとエラー値
の例外処理をしてやるか、簡単にするなら次のようにしてみると良いと
思います( ・∀・)

> C_COUNT = Sheets("masta").Cells(2, 3).Text
   ↓
C_COUNT = Val(Sheets("masta").Cells(2, 3).Value)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!