• ベストアンサー

If文で何故か望んだ結果が出ない。

VBSで、 a=inputbox ("a") b=inputbox ("b") c=inputbox ("c") x=(a-2000+b)-c*0.8 If x<c then msgbox x&" type Y" else msgbox " type N" End if と、いうのを制作したのですが、 例えば、a=15000、b=4000、c=5000と数値を入力した場合、x=13000となり、 「x<c」では無いので結果標示が「type N」となるはずなのですが何故か「13000 type Y」と標示されてしまいます。 色々と試行錯誤したのですが、何故このような結果になってしまうのか皆目検討がつきません。 宜しければ何が原因となっているのか御教示お願いいたします。

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

  • ベストアンサー
  • galoon
  • ベストアンサー率28% (38/133)
回答No.1

inputbox 関数からの戻りは文字列です。 したがって、a b c は単体で見ると文字列 "15000" "4000" "5000" が入っています。 x への代入文は 2000 や 0.8 といった数値が混入しているため自動的に文字を数値に変換して演算されているため結果が 13000 という数値になります。 しかし、問題のIF部分では単体同士の比較を行っているため 13000 < "5000" となっているのです。 つまり文字列と数値の比較であるためご期待の結果が得られないわけです。 そこで、IF文内の c を CInt(c) とするとご期待の結果が得られると思います。

abo55
質問者

お礼

ご回答ありがとう御座います。 なるほど、「13000」という数字と「5000」という文字を比べていたわけですね。 まさに目から鱗です。 重ねて御礼申し上げます。ありがとう御座いました。

その他の回答 (1)

回答No.2

お世話になります。 おそらく、型の問題だとおもうんですが…。 >x=(a-2000+b)-c*0.8 ↑で、xは内部でDouble型として処理されていて cは文字列型で、その比較を行っているので 正しい結果が出なかったのかな、と。 そこで、cをDouble型になるようにしたら うまくいったみたいです。 a = inputbox ("a") b = inputbox ("b") c = inputbox ("c") x = (a-2000+b)-c*0.8 c = c * 1.0 If x<c Then   MsgBox x & " type Y" Else   MsgBox " type N" End if

abo55
質問者

お礼

ご回答ありがとう御座います。 確かに「c」を数値として定義し直すとうまくいきますね。 修正までしていただいてありがとう御座いました。

関連するQ&A