
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の処理のところで「型が一致しません」というエラーが出ます。
これの原因または回避方法を教えてください。
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
回答ありがとうございます。参考にさせていただきます。
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処理の部分は別の配列を用意してその要素を代入するという形にして見ました。
No.3
- 回答日時:
>自分としてはif文の条件にあてはまらない限り中の処理を実行しないため、二重に定義してはいないと思っているのですが
変な仕様に思えますが、VBScript では、定義済み変数の有無を調べる時に IF 文の中か外かを区別しませんし、IF 文の中だけで有効な変数というものも定義できません。従って IF 文の始まる前に定義するのが正解です。
Java などでは、変数の有効範囲をなるべく小さくするよう推奨されますが、VBScript では、一連の処理コーディングの前に固めて変数定義をします。こういう理由がある為です。
>dim arry(2) と1回だけ宣言すればこのエラーは出なくなりますが今度はsplitの処理のところで「型が一致しません」というエラーが出ます。
split の受け側を配列にすると、エラーになるのが要因です。
No.1
- 回答日時:
回答ありがとうございます。
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スイッチが二台あり、別々のア...
-
aspxをhtmlに変換する方法について
-
VB.NETでMSComm が追加できず?
-
vba マージエリアの行数を非表...
-
Windows10を新規インストールし...
-
Windowsで複数のファイルを同じ...
-
onedrive にexcelファイルをア...
-
SJISで、全角文字Aの文字コード...
-
vba 空のデータをSplitする時の...
-
ffftpでファイル取得が0バイト...
-
VBAでPDFを作成する際、同じ名...
-
VBAでPDF作成をしたあと、指定...
-
Excelにて、シート間で、データ...
-
VB2017で、WEBサイト...
-
エクセル VLOOKUP検索で一番新...
-
フォルダの中のフォルダも圧縮...
-
コマンドプロンプトの窓の起動...
-
エクセルに張り付けた写真のフ...
-
SPO2測定
-
高校1年生情報の問題について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
式はメソッドではありませんと...
-
名前が二重に定義されています
-
TCPサーバ bind関数のエラーに...
-
ASPでAccessのデータを更新、削除
-
EXCEL VBA API宣言でコンパイル...
-
VBSにてサーバー中のエクセルフ...
-
VBSでIEを起動し、拡大率を変更...
-
CreateObjectの同時実行時について
-
VBSについて
-
ACCESSのAutoKeysマクロでアク...
-
submit できない
-
ネットワーク上のPCのIPとホス...
-
C# try-catch でcatchに飛ばす方法
-
ASPプログラミングでADODB.C...
-
EXECLマクロでshapeがグルーフ...
-
Response.Redirectで引数2つの...
-
画面のリフレッシュを意図的に...
-
FileCopy時のエラー
おすすめ情報