プログラミング

プログラミングに関するフォーラムです。VBAは除きます。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : 指定なし)
InputBoxに関して
投稿日時: 17/01/06 16:03:21
投稿者: hisayanxp

Vbsの勉強を始めたばかりの初心者です。質問させてください。
 
Option Explicit
Dim x,y
x= InputBox("xの値を入力")
y= InputBox("yの値を入力")
 
If x >y Then
       MsgBox x& "は" & y & "より大きい。"
Else
       MsgBox x & "は" & y & "以下だ。"
End If
 
この記述で実行した場合、x=1,y=10を代入したときには
「1は10以下だ。」というメッセージが出ます。
しかしx=9,y=10を代入したときは
「9は10より大きい」というメッセージがでてきます。
 
そこで上の記述の2行を以下のようにCIntでくくって実行しました。
x= CInt(InputBox("xの値を入力"))
y= CInt(InputBox("yの値を入力"))
すると正しい表示がされました。
 
@最初の記述ではInputBoxの結果が文字列であるため、めちゃくちゃな結果を表示すると考えればよいのでしょうか?
 
Aまた最初の記述でデータ型が数値である宣言をしておけばよかったのでしょうか?
もし宣言するとすればどのような記述にすればよいでしょうか?お分かりの方がおいででしたらお教え下さい。

回答
投稿日時: 17/01/06 17:35:16
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
@最初の記述ではInputBoxの結果が文字列であるため、めちゃくちゃな結果を表示すると考えればよいのでしょうか?

 
めちゃくちゃな結果を表示する
は、あなたの身勝手な考えです。
文字列では、1文字ごとに比較されますから、「9」は「1」より大きいと判断されます。
どのような比較をしたいのか、PCは勝手に推測することはできません。
 
InputBoxは文字列を返す関数です。
数値比較をしたいならば、受取った値を「数値」に変換するのが当たり前です。
数値変換には、いろいろあります
CIntでもCLngでもよいでしょう。扱う数値の範囲できまります。

回答
投稿日時: 17/01/06 17:36:51
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
Aまた最初の記述でデータ型が数値である宣言をしておけばよかったのでしょうか?
もし宣言するとすればどのような記述にすればよいでしょうか?お分かりの方がおいででしたらお教え下さい。

 
VBSはデータ型の宣言ができません。
従って、使う時に変換することになります。

回答
投稿日時: 17/01/06 17:43:23
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
 
前レスで説明した通り
INPUTBOX関数は文字列を受取る関数です。
ですから数字以外も入力できてしまいます。
 
受取った値を、いきなり、CInt関数で数値化すると、
若し、数字以外の文字が入力されていると、エラーになってしまいます。
数字以外が入力されているか、チェックすることが肝要です。

投稿日時: 17/01/07 18:22:34
投稿者: hisayanxp

WinArrow さん
丁寧なご説明をありがとうございました。
よく分かりました。