プログラミング

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

 
(Windows 10 Home : 指定なし)
typename関数について
投稿日時: 17/01/09 12:28:52
投稿者: hisayanxp

VBSでその都度入力された値の判定をできるようにInputBoxとMsgBoxを使って以下のような記述をしました。
 
Option Explicit
Dim Test
Test=CInt(InputBox("文字でも数字でも入力してください。"))
MsgBox typename(Test)
 
すると
入力した値が数値の場合は 5桁から「オーバーフローしました」というエラーが出て、文字列を入れると「型が一致しません」というエラーが出ました。(これはCIntを使っているのだから当たり前だなと思いました)
 
VBSでその都度入力された値の判定をできるような記述ができるでしょうか?

回答
投稿日時: 17/01/10 22:23:51
投稿者: MMYS

hisayanxp さんの引用:

5桁から「オーバーフローしました」というエラーが出て、

コンピュータで扱える数値には上限があります。
 
CInt    -32768〜32767
CLng    -2147483648〜2147483647
 
つまり、CIntは上限が3万2千です。数値5桁は上限を超えてるのでエラーになります。
CLngの上限は20億なのでCLngを使いましょう。
なお、上記(整数型)では、小数点は扱えません。
http://excel.style-mods.net/tips_vbs/vbstips_1-02.htm
 
hisayanxp さんの引用:

VBSでその都度入力された値の判定をできるような記述ができるでしょうか?

もちろん、出来ます。考え方を以下に示します。
 
1.変数にInputBox関数の値を受け取ります。
2.変数の内容をIsNumeric関数で数値かどうかチェツクします。
3.数値変換可能な場合、CLng関数で数値に変換します。
 
InputBox関数は入力された文字をとりあえず、返すだけです。
どこかに保持しておかないとすぐに消えてしまいます。なので、変数に保持します。
て、入力された文字列が数値なのかをチェツクします。でそのチェックですが便利な関数あります。
IsNumeric関数です。IsNumeric関数は "12345" のような数値文字列か、それとも "1234a" のように
数値に読めない文字列かを判定してくれます。
IsNumeric関数の結果をIf文で分岐します。数値文字列のときのみ、さきほど保持した値をCLng関数で数値に変換します。
 
IsNumeric関数
https://msdn.microsoft.com/ja-jp/library/cc410249.aspx
 
 
なお、TypeName関数は割り当てられた変数の型を調べる関数です。文字列判定には使えません。
https://msdn.microsoft.com/ja-jp/library/cc392344.aspx
 
 

投稿日時: 17/01/18 14:57:33
投稿者: hisayanxp

MMYSさん
お返事が遅くなり申し訳ありませんでした。
よく理解できました。ありがとうございました。