• ベストアンサー

VBSのIF文について

VBSのIF文の質問です。 OS:XP(SP3) たまたま間違った変数名を使った事ではまってしまった事なのですが 下記がTrueで評価されてしまいました。これは正しい評価なのでしょうか? サンプルコード rcode = 0 a = 0 If rcode = e Then msgbox "「" & rcode & "」 = 「" & e & "」は間違った評価だと思います" else msgbox "「" & rcode & "」 <> 「" & e & "」です" end if

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

MsgBox TypeName(e) を実行すると、「Empty」と表示されます。  ここで、 rcode = 0 である場合に、 rcode = e という式の意味は、 0 = empty となりますが、 ●VBScript ランゲージ リファレンス - VBScript の演算子 - 比較演算子 http://msdn.microsoft.com/ja-jp/library/cc392349.aspx に ------------- 引用 → 条件:行われる演算 一方の式が Empty、他方が数値:数値モードで比較を行います。Empty には 0 を使用します。 ← 引用 ------------- とありますので、 0 = 0 と評価され、従って「True」と評価されます。  ご参考までに。。。 ●VBScript の変数 http://msdn.microsoft.com/ja-jp/library/cc392253.aspx ------------- 引用 → Microsoft® Visual Basic® Scripting Edition (以下 VBScript) では、変数のデータ型は常にバリアント型 (Variant) です。 ← 引用 ------------- ●VBScript のデータ型 http://msdn.microsoft.com/ja-jp/library/cc392195.aspx ------------- 引用 → Empty 値は、初期化されていない (初期値が代入されていない) バリアント型 (Variant) の変数を示します。その値は、数値変数として使用されるときは 0、文字列変数として使用されるときは長さ 0 の文字列 ("") として扱われます。 ← 引用 -------------

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

別件ですが Option Explicit を付けて、宣言無しに変数を使えないようにすると、変数名を間違えたときにはエラーになるので、少しは間違いを減らせます。 間違えた変数名が、定義済みの別の変数名になってしまっているとダメですが

関連するQ&A

  • vbsのFolderExistsで部分一致をさせたい

    VBSで以下のコードを作成しましたが動作しません。 ********動作しない************************** if (objFileSys.FolderExists("200810*")= True) then  msgbox "yes" else  msgbox "no" end if ********動作する************************** if (objFileSys.FolderExists("200810")= True) then  msgbox "yes" else  msgbox "no" end if 部分一致でフォルダが存在するかをしたいのですが、 どうしたらいいのでしょうか。 よろしくお願いします。

  • VBS どうするの?

    VBSで、 a=inputbox("0+1=") if lang=1 then  msgbox("あってます。")  else  msgbox("間違えています。") end if として、 msgbox("間違えています。") のあとに、もういちど最初(aの位置)にもどしたいときはどうすればよいでしょう? よろしくおねがいします。

  • vbsのif文で複数条件の判定

    例えば以下である場合、 WScript.echo AAA WScript.echo BBB vbsを実行すると "?"が表示されます。 "OK"が表示されない原因として考えられる事はありますでしょうか If AAA = false Then If BBB = false Then WScript.echo "OK" else WScript.echo "NG" End If else WScript.echo "?" End If

  • if文からcase文への置き換え

    ピクチャボックスをクリックしたら、チェック ボックスがチェックされるメソッドを作りたいと 思っています。 Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click 'ここから If sender Is PictureBox1 Then If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If ElseIf sender Is PictureBox2 Then If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End If 'ここまで End Sub 上記のif文をCase文に置き換えたくて、 'ここから Select Case sender Case PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select 'ここまで 上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。 Case文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?

  • IF文で該当の処理を通らない

    VB6 SP5 フォームのロードで構造体変数に 値を入れ、ボタンを押したときに IF文の処理を通したのですが aaaに20以上の数値を入れると 該当の処理を通らず全てELSEを 通ってしまいます 以下コード ////// 標準モジュール ////// Type Strct_Dat □□start_no(5) As Integer □□end_no(5) As Integer End Type Global StrctDat As Strct_Dat ////// フォーム ////// Private Sub Form_Load() □□With StrctDat □□□□.start_no(0) = 1 □□□□.start_no(1) = 10 □□□□.start_no(2) = 20 □□□□.start_no(3) = 30 □□□□.start_no(4) = 40 □□□□.end_no(0) = 9 □□□□.end_no(1) = 19 □□□□.end_no(2) = 29 □□□□.end_no(3) = 39 □□□□.end_no(4) = 49 □□End With End Sub Private Sub Command3_Click() □□Dim aaa As Integer □□aaa = 20 □□With StrctDat □□□□If .start_no(0) <= aaa And aaa <= .end_no(0) Then □□□□□□MsgBox ("0") □□□□ElseIf .start_no(1) <= aaa And aaa <= .end_no(1) Then □□□□□□MsgBox ("1") □□□□ElseIf .start_no(2) <= aaa And aaa <= .end_no(2) Then □□□□□□MsgBox ("2") □□□□ElseIf .start_no(3) <= aaa And aaa <= .end_no(3) Then □□□□□□MsgBox ("3") □□□□ElseIf .start_no(4) <= aaa And aaa <= .end_no(4) Then □□□□□□MsgBox ("4") □□□□Else □□□□□□MsgBox ("ELSE") □□□□End If □□End With End Sub 構造体の型をLONGにすると ちゃんと該当処理をとおります また、デバッグ時は正常で EXE化したときのみ該当処理を 通らなくなります 回避方法はあるのですが 何かご存知の方いらっしゃいましたら 教えて下さい よろしくお願い致します

  • EXCEL2007 VBA IF文について

    プログラム If Sheets("sheet1").Cells(85, 1).Value = Cells(13, 1).Value Then msgBox "true" Else msgBox"false" End If 値 Sheets("sheet1").Cells(85, 1).Value ← 0.38125 Cells(13, 1).Value ← 0.38125 上記のプログラムと値のとき、結果はtrueが表示されると思うのですが、なぜかfalseが表示されてしまいます。なぜ、falseが表示されるのか解りましたら教えてください。 値はウォッチで確認しています。

  • End Ifは不要な場合もある?

    Excel2010使用で下記のVBAのコードを書きました。 Sub イフとエンドイフは組ではなかったのか()  Dim Flag As Boolean  Dim S As Worksheet   For Each S In Worksheets    If S.Name = "合計" Then Flag = True '   Else '    Flag = False '   End If   Next S   If Flag = True Then    MsgBox "「合計」というシートはすでに存在します"   Else    Worksheets(1).Copy after:=Worksheets(Worksheets.Count)    ActiveSheet.Name = "合計"   End If End Sub 前半の >' Else >' Flag = False >' End If の部分があると「Elseに対応するIfがありません」というエラーが出ます。 Elseに関する記述だけをコメントアウトすると「End Ifに対応するIfブロックがありません」というエラーが出ます。 この部分をコメントアウトすればきちんと動作するのですが、If文はちゃんと存在しているにもかかわらず、またほとんど同じ記述の後半ではエラーが出ないというのに、なぜこのようなエラーが出るのかわかりません。 なにか勘違いをしているのでしょうか。

  • VBSでExcelのオープン確認

    VBSCRIPTでエクセルに書き込むものを作っているのですが・・・ エクセルが開きっぱなしの場合、同じシートが開いて書き込めなかったりなど有りその対策を考えています。 もし開いていたらMsgBoxを出して終了させてしまおうかと思うのですがエクセルが開いているかどうか確認できません・・・ どのようにしたらよいでしょうか? wbCount = objExcel.Workbooks.Count msgbox wbCount myFlag = False for i = 1 to wbCount if objExcel.Workbooks(i).Name = strFilename then myFlag = True Exit for end if next if myFlag = True then msgBox "Open" else msgBox "not Open" end if

  • VBS 教えて!2

    http://oshiete1.goo.ne.jp/qa5372858.html で質問したものです。 「loopにDoがありません」というエラーが発生するのはなぜですか? VBSだとgotoが使えないので、Do~loop命令をつかったのですが、いまいち使いこなせません。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do total = Inputbox("動画の再生時間を入力してください","ビットレート自動計算機") music = Inputbox("音声ビットレートを入力してください","ビットレート自動計算機") x = 335544/total - music - 15 IF not(x>0) then Msgbox "入力した情報は不正です" elseIF x>656 then Msgbox "推奨映像ビットレートは656kbpsです。" else Msgbox "推奨映像ビットレートは" & x & "kbpsです。" end IF Msgbox "続けて計算しますか?",vbyesno IF vbyes then loop elseIF vbno then Msgbox"終了します" end IF ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • VBS正規表現の方法

    教えてください。 <内容> VBSにてメールアドレスチェックをしているのですが、うまくいきません。 <仕様> アカウント 大文字不可。 ドメイン  大文字不可。 最後は英文字で終わる。 .(ドット)とかで終わりにしない。 <ソース> Set objRE = New RegExp objRE.Global = True objRE.IgnoreCase = False objRE.Pattern = "([0-9a-z_\.+-]*)(@?)([0-9a-z-\.]*)([a-z]+)" Set Matches = objRE.Execute(mstrMailValue) Set objSM = Matches(0) mAccount = objSM.SubMatches(0) mAtmark = objSM.SubMatches(1) mDomain = objSM.SubMatches(2) & objSM.SubMatches(3) MsgBox (mAccount & mAtmark & mDomain) If (mAtmark <> "@") Then MailChk = False Else If (Len(mAccount) < 1) Or (Len(mAccount) >= 80) Then MailChk = False Else If (Len(mDomain) <= 3) Or (Len(mDomain) >= 63) Then MailChk = False Else If (mAccount & mAtmark & mDomain) <> mstrMailValue Then MailChk = False Else MailChk = True End If End If End If End If objRE.Patternがうまくいっていないと思います。 全て数値にすると、エラー(VBSがストップ)する。 どなたか教えてくださいませ。m(-_-)m 上記のソースよりも他の手があれば教えてください。

専門家に質問してみよう