• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:実行時エラーの原因がわかりません!)

VBAの実行時エラー13:型が一致しませんの原因と対処方法

このQ&Aのポイント
  • VBAのプログラムで実行時エラー13:型が一致しませんが発生しました。原因は、変数Aのバリアント型が正しく設定されていないためです。
  • 変数Aの初期化時に、変数Bの値を格納する必要がありますが、適切な範囲を指定していません。
  • 変数Aの2列目に計算結果を代入する際、変数の型が一致していない場合にエラーが発生します。型の一致を確認してください。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.5

恐らく質問者は、xl2000を使っているのでしょう。 xl2000では、5461より大きい要素の配列は返せません。 で、5461を半分ずつ転記するか、Forでくるくる転記になります。 が、あくまでもIndex関数で一発でやりたいということであれば、 その方法は下記マイクロソフトサイトに詳しく書いてありますので お試しください。 ただ、Registoryを弄ることになるので、自己責任でトライのこと。(^^;;; http://support.microsoft.com/kb/250828/ 因みに当方もxl2000で、質問者のエラーを再現確認後、 上記解決法を試してみましたところ、上手く動作しました。 以上。

okranta
質問者

お礼

 連絡が遅くなってすみません。おっしゃる通りエクセル2000を使ってます。それ故のエラーだったんですね。  教えて頂いたURLで少し勉強して見ます。どうもありがとうございました!

その他の回答 (5)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.6

No5、onlyromです。 No5の回答におかしな文言がありますので訂正します。   >5461を半分ずつ転記するか、Forでくるくる転記 を ●5461以内の配列を複数とって処理するか、Forでくるくる転記   に訂正します。 以上。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

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)
回答No.3

ANo.1です。 補足で提示されたコード(Dimが抜けてるのを修正して)をコピペして、 実行してみましたがエラーにはなりませんでした。 (当方Excel2002です。)

okranta
質問者

補足

 何度もすみません。例をもっと簡略化して色々と検証してみました。 すると 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)
回答No.2

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)ですが、これは記法的にエラーになるのでは無いですか。

okranta
質問者

補足

 回答ありがとうございます。おっしゃるとおり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)
回答No.1

疑問に思ったのが、 >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 再計算 が何をしているのか?によるかと。

okranta
質問者

補足

すみません!例えが間違ってました。以下の場合で考えてもらえないでしょうか? 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) この場合でもやはり、"型が一致しない"実行時エラーが出てしまいます。どこがおかしいのでしょうか??