![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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ランキング
-
onedrive にexcelファイルをア...
-
キヤノン アソビカメラ iNSPiC ...
-
phpのファイルがブラウザで開か...
-
お世話になります。 Windows Up...
-
VB.NET 2017の勉強中です。 今...
-
Windows10にデュアルブートでXP...
-
Wi-Fiのパスワードが指定なしと...
-
VBAのRegExpで後方一致/不一致...
-
W10環境変数の%記号
-
aspxをhtmlに変換する方法について
-
”KINGSOFT WPSのVBエディタ画面...
-
図に入っている文字をセルに書...
-
エクセルに張り付けた写真のフ...
-
Windowsで複数のファイルを同じ...
-
SPO2測定
-
高校1年生情報の問題について。
-
エクセルのマクロについて教え...
-
インドe-Visa 承認書のApplicat...
-
SPIの非言語の割合と比が難しく...
-
SPIの対策は参考書でやるべきか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
vbscriptの変数宣言
-
名前が二重に定義されています
-
EXCEL VBA API宣言でコンパイル...
-
VBSでIEを起動し、拡大率を変更...
-
VBSにてサーバー中のエクセルフ...
-
式はメソッドではありませんと...
-
ハンゲーム
-
COBOLのPERFORM文
-
標準モジュールPublic宣言変数...
-
golang 空文字判定について
-
TCPサーバ bind関数のエラーに...
-
CreateObjectの同時実行時について
-
ACCESSのAutoKeysマクロでアク...
-
イメージ表示
-
エクセル同一セル内の指定文字...
-
ダブルクォーテーションの吐き出し
-
十進BASICについて
-
C# try-catch でcatchに飛ばす方法
おすすめ情報