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で質問しましょう!
似たような質問が見つかりました
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
VBSにてサーバー中のエクセルフ...
-
SumIFsとDateSerial vba
-
vbscriptの変数宣言
-
ソケット通信で同時受信の制限?
-
名前が二重に定義されています
-
C# try-catch でcatchに飛ばす方法
-
Response.Redirectで引数2つの...
-
ASPからASPを呼び出す方法
-
VBA RemoveDuplicatesで「アプ...
-
VBScrpitで取得した値(trueまた...
-
Outlookで添付ファイルの有無を...
-
SSIでASPを実行したいのですが...
-
aspの記述がコメント表示されて...
-
ASPへのデータの受け渡しについて
-
AutoLoad()関数の使い方がわか...
-
マルチTIFFの作成
-
ASP内で他のASPファイルを読み...
-
実行される順番について
-
Global.asaxで Server.CreateOb...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
VBSでIEを起動し、拡大率を変更...
-
TCPサーバ bind関数のエラーに...
-
名前が二重に定義されています
-
VBSにてサーバー中のエクセルフ...
-
式はメソッドではありませんと...
-
vbscriptの変数宣言
-
EXCEL VBA API宣言でコンパイル...
-
CreateObjectの同時実行時について
-
標準モジュールPublic宣言変数...
-
golang 空文字判定について
-
VBSについて
-
ハンゲーム
-
ASPでAccessのデータを更新、削除
-
C# try-catch でcatchに飛ばす方法
-
FileCopy時のエラー
-
エラー 'ASP 0115' について
-
隠しフィールドをVBScriptでの...
-
EXECLマクロでshapeがグルーフ...
おすすめ情報