dポイントプレゼントキャンペーン実施中!

If 条件 then
dim arry(2)
arry(0)="null"
arry(1)="null"
arry(2)="null"
else
if 条件 then
dim arry(2)
arry(0)="0"
arry(1)="0"
arry(2)="0"
elseif y(0)="1" then
arry=split(x,",")
end if
end if

と書いてみたのですが、arryのところで「名前が二重に定義されています」というエラーが出てしまいます。自分としてはif文の条件にあてはまらない限り中の処理を実行しないため、二重に定義してはいないと思っているのですが間違っているのでしょうか?
if文の外に dim arry(2) と1回だけ宣言すればこのエラーは出なくなりますが今度はsplitの処理のところで「型が一致しません」というエラーが出ます。
これの原因または回避方法を教えてください。

A 回答 (3件)

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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。参考にさせていただきます。

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処理の部分は別の配列を用意してその要素を代入するという形にして見ました。

お礼日時:2008/09/11 20:24

>自分としてはif文の条件にあてはまらない限り中の処理を実行しないため、二重に定義してはいないと思っているのですが



変な仕様に思えますが、VBScript では、定義済み変数の有無を調べる時に IF 文の中か外かを区別しませんし、IF 文の中だけで有効な変数というものも定義できません。従って IF 文の始まる前に定義するのが正解です。
Java などでは、変数の有効範囲をなるべく小さくするよう推奨されますが、VBScript では、一連の処理コーディングの前に固めて変数定義をします。こういう理由がある為です。

>dim arry(2) と1回だけ宣言すればこのエラーは出なくなりますが今度はsplitの処理のところで「型が一致しません」というエラーが出ます。

split の受け側を配列にすると、エラーになるのが要因です。
    • good
    • 1

宣言だけして実体はif内でnew   できない?



http://www.microsoft.com/japan/msdn/net/vbnetref …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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内でも配列の初期化はできているのではと思うのですが。

お礼日時:2008/09/11 17:15

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