- ベストアンサー
VBAの実行時エラー13:型が一致しませんの原因と対処方法
- VBAのプログラムで実行時エラー13:型が一致しませんが発生しました。原因は、変数Aのバリアント型が正しく設定されていないためです。
- 変数Aの初期化時に、変数Bの値を格納する必要がありますが、適切な範囲を指定していません。
- 変数Aの2列目に計算結果を代入する際、変数の型が一致していない場合にエラーが発生します。型の一致を確認してください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
恐らく質問者は、xl2000を使っているのでしょう。 xl2000では、5461より大きい要素の配列は返せません。 で、5461を半分ずつ転記するか、Forでくるくる転記になります。 が、あくまでもIndex関数で一発でやりたいということであれば、 その方法は下記マイクロソフトサイトに詳しく書いてありますので お試しください。 ただ、Registoryを弄ることになるので、自己責任でトライのこと。(^^;;; http://support.microsoft.com/kb/250828/ 因みに当方もxl2000で、質問者のエラーを再現確認後、 上記解決法を試してみましたところ、上手く動作しました。 以上。
その他の回答 (5)
- onlyrom
- ベストアンサー率59% (228/384)
No5、onlyromです。 No5の回答におかしな文言がありますので訂正します。 >5461を半分ずつ転記するか、Forでくるくる転記 を ●5461以内の配列を複数とって処理するか、Forでくるくる転記 に訂正します。 以上。
- n-jun
- ベストアンサー率33% (959/2873)
ANo.3です。 シート1の全セル(65536行・256列)にデータを入れて Dim A As Variant A = Range(Cells(1, 1), Cells(6000, 256)) MsgBox Application.Index(A, 1, 2) でテストしても問題なかったです。 なので再現できないです。
- n-jun
- ベストアンサー率33% (959/2873)
ANo.1です。 補足で提示されたコード(Dimが抜けてるのを修正して)をコピペして、 実行してみましたがエラーにはなりませんでした。 (当方Excel2002です。)
補足
何度もすみません。例をもっと簡略化して色々と検証してみました。 すると Dim A As Variant, i As Integer A = Range(Cells(1, 1), Cells(100, 54)) '(1) For i = 1 To 100 A(i, 2) = 1 Next Range(Cells(1, 2), Cells(100, 2)) = Application.Index(A, 0, 2) 上記の場合はエラーなく実行できました。しかし(1)の行を A = Range(Cells(1, 1), Cells(100, 55)) と列を54から55に増やしたところ、エラーが出ることが判りました。行を増やすことによって型が変化してしまうのでしょうか??
- imogasi
- ベストアンサー率27% (4737/17069)
INDEXが使えること Sub test01() Set A = Worksheets("Sheet1").Range("A1:D20") MsgBox Application.Index(A, 2, 3) MsgBox A.Address End Sub バリアント変数にセル範囲の値を代入し、配列敵に捉える Sub test02() Dim A As Variant, B As Variant A = Range(Cells(1, 1), Cells(10, 4)) For i = 1 To 10 MsgBox A(i, 4) Next End Sub はOKを確認しました。 ーーーー ただB(i - 1, 2) などでi が1の時、B(0,2)ですが、これは記法的にエラーになるのでは無いですか。
補足
回答ありがとうございます。おっしゃるとおりB(0,2)は間違いです。現在、例を簡略化して色々と検証したところ、バリアント型Aの範囲を広く設定するとエラーが発生することが判りました。例えばAを A = Range(Cells(1, 1), Cells(10, 10)) なら実行できても A = Range(Cells(1, 1), Cells(1000, 200)) にするとエラーが出てしまうといった感じです。 バリアント型にも限界があるのでしょうか??
- n-jun
- ベストアンサー率33% (959/2873)
疑問に思ったのが、 >For i = 1 To 1000 >A(i, 2) = A(i, 2) + B(i - 1, 2) * 3 - A(i, 1) iが1の時B(i -1 ,2)はB(0,2)ですが、 >B = Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(1000, 255)) の場合Bは1~1000,1~255になりますので、 B(0,2)はあり得ないです。 あとは、Call 再計算 が何をしているのか?によるかと。
補足
すみません!例えが間違ってました。以下の場合で考えてもらえないでしょうか? A as Variant, B as Variant, i as Integer A = Range(Cells(1, 1), Cells(100, 255)) B = Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(100, 255)) For i = 10 To 100 A(i, 2) = A(i, 2) + B(i - 1, 2) * 3 - A(i, 1) B(i, 2) = B(i, 2) + B(i - 1, 2) + B(i, 1) Next Range(Cells(1, 2), Cells(100, 2)) = Application.Index(A, 0, 2) この場合でもやはり、"型が一致しない"実行時エラーが出てしまいます。どこがおかしいのでしょうか??
お礼
連絡が遅くなってすみません。おっしゃる通りエクセル2000を使ってます。それ故のエラーだったんですね。 教えて頂いたURLで少し勉強して見ます。どうもありがとうございました!