• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:名前が二重に定義されています)

配列の二重定義エラーと型一致エラーの原因と回避方法

このQ&Aのポイント
  • 名前が二重に定義されているエラーの原因や回避方法について教えてください。
  • split関数による型一致エラーの原因や回避方法について教えてください。
  • 自分としてはif文の条件にあてはまらない限り中の処理を実行しないため、二重に定義してはいないと思っているのですが、エラーが出る理由がわかりません。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

anyを単純なバリアント型として宣言しておきましょう 配列でアクセスしたい場合は Redimで要素数を指定してから使います Splitで分解する場合はRedimは使用しません dim arry If 条件 then   redim arry(2)   arry(0)="null"   arry(1)="null"   arry(2)="null" else   if 条件 then     redim arry(2)     arry(0)="0"     arry(1)="0"     arry(2)="0"   elseif y(0)="1" then    arry=split(x,",")   end if end if

shaka001
質問者

お礼

回答ありがとうございます。参考にさせていただきます。 dim arry(2) If 条件 then   arry(0)="null"   arry(1)="null"   arry(2)="null" else   if 条件 then     arry(0)="0"     arry(1)="0"     arry(2)="0"   elseif 条件 then    z=split(x,",")     arry(0)=z(0)     arry(1)=z(1)     arry(2)=z(2)   end if end if という感じで、split処理の部分は別の配列を用意してその要素を代入するという形にして見ました。

その他の回答 (2)

noname#259269
noname#259269
回答No.3

>自分としてはif文の条件にあてはまらない限り中の処理を実行しないため、二重に定義してはいないと思っているのですが 変な仕様に思えますが、VBScript では、定義済み変数の有無を調べる時に IF 文の中か外かを区別しませんし、IF 文の中だけで有効な変数というものも定義できません。従って IF 文の始まる前に定義するのが正解です。 Java などでは、変数の有効範囲をなるべく小さくするよう推奨されますが、VBScript では、一連の処理コーディングの前に固めて変数定義をします。こういう理由がある為です。 >dim arry(2) と1回だけ宣言すればこのエラーは出なくなりますが今度はsplitの処理のところで「型が一致しません」というエラーが出ます。 split の受け側を配列にすると、エラーになるのが要因です。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

宣言だけして実体はif内でnew   できない? http://www.microsoft.com/japan/msdn/net/vbnetref/vbnetref3-3.aspx

shaka001
質問者

お礼

回答ありがとうございます。 If 条件1 then   dim arry(2)    ・・・*1 arry(0)="null" arry(1)="null" arry(2)="null" else if 条件2 then  dim arry(2)    ・・・*2 arry(0)="0" arry(1)="0" arry(2)="0" elseif 条件3 then arry=split(x,",") end if end if と言う場合、条件1の中に入っていったときに、*1をコメントアウトすると「型の不一致」が出ます。*1ではなく*2をコメントアウトすれば正常に動作します。 条件2の中に入っているときに*1のみコメントアウトすると正常に動作し、*2のみコメントアウトすると「型の不一致」になります。 恐らく、if内でも配列の初期化はできているのではと思うのですが。

関連するQ&A