整数部2桁、小数部1桁まで入力可能なテキストの入力チェックは以下で正しいでしょうか。
コンパイラ環境は現在ないので確認お願いします。
・以下でコンパイルエラーは発生しませんか
・入力チェックの方法として正しいでしょうか
間違いやまたよりよい方法がある場合はアドバイスください。
Dim a() as string
a=Split(Text, ".") 'Textは入力値
If(UBound(0) = 1) Then '小数点が入力されたときはa=1となる
If(length(a(0)) < 2) Then
エラー
Else If(length(a(1)) < 1) Then
エラー
End if
Else If
If(length(a(0)) < 2) Then
エラー
End If
End If
No.3ベストアンサー
- 回答日時:
NO1です。
整数部は2桁、小数部は1桁しか許容しないのであれば、もう少し簡略出来ますが如何でしょうか。
Dim a() as string
a=Split(Text, ".") 'Textは入力値
If UBound(a) = 1 Then '小数点が入力されたときはa=1となる
If len(a(0)) <> 2 Or Len(a(1)) <>1 Then
エラー
End If
ElseIf len(a(0)) <> 2 Then
エラー
End If
No.2
- 回答日時:
以前も同じような質問されましたよね?
正規表現でチェックした方が楽だと思いますけど・・・
掲題のプログラムから見ると、「整数2桁」または
「整数2桁.小数1桁」しか許さないみたいですね。
この場合は「(^\d{2}$)|(^\d{2}\.\d{1}$)」です。
コンパイラが無くてもVBSやExcelマクロで調べられます。
正規表現を少し解説します。
(A)|(B)は「AまたはB」と言う意味
^は文字列先頭、$は文字列終端
\dは数字を表し、{2}は2文字を表す
^\d{2}$→数字で始まる+数字は2桁+数字で終わる
^\d{2}\.\d{1}$→数字で始まる+数字は2桁+ピリオドがある
+数字は1桁+数字で終わる
そのいずれかのパターンです。
If WScript.Arguments.Count = 0 Then
WScript.Echo "文字を入力してください"
WScript.Quit
End If
Dim R, S
Set R= CreateObject("VBScript.RegExp")
R.Pattern = "(^\d{2}$)|(^\d{2}\.\d{1}$)"
S = R.Test(WScript.Arguments(0))
WScript.Echo "結果=" & S
上をテキストファイルhoge.vbsとして格納し、
コマンドプロンプトから cscript hoge.vbs 00.5 とか
打ち込んでみてください。
ご説明ありがとうございます。
たしかに正規表現を使用したほうが便利だと思いますが、
今回は入力チェックのエラーメッセージを使い分けるので使用しないでおこうと思います。
No.1
- 回答日時:
一例です。
UBoundの引数が不正、Lengthは配列の要素数なのでLenでないといけない。
If(UBound(a) = 1) Then '小数点が入力されたときはa=1となる
If(len(a(0)) < 2) Then
ご回答ありがとうございます。
以下のように修正しましたが、どうでしょうか。
Dim a() as string
a=Split(Text, ".") 'Textは入力値
If(UBound(a) = 1) Then '小数点が入力されたときはa=1となる
If(len(a(0)) < 2) Then
エラー
Else If(len(a(1)) < 1) Then
エラー
End if
Else If
If(len(a(0)) < 2) Then
エラー
End If
End If
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムの実行時に'<'でリダ...
-
正負を反転させて出力するプロ...
-
漢字のソートについて
-
*をユーザーが入力した数字の数...
-
C言語について
-
Userformの入力順序をタブオー...
-
コマンドプロンプトからのEOFの...
-
Yesならこっちへ、NOなら...
-
Excel VBAで、Application.Inpu...
-
プログラミング初心者です。 Py...
-
C言語(構造体)
-
cygwin上でのプログラミングに...
-
IF文で戻ることはできますか?...
-
getchar()について 教えてくだ...
-
4桁の数字以外を入力したらエラ...
-
C言語について質問です。 以下...
-
scanf()で、エラー対応
-
"scanf"でエンターで改行させな...
-
Javaの質問です
-
恥ずかしながらC言語解析中のプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
小数か整数かを判定する方法
-
cout関数を使っているのですが...
-
double型が正常に認識されてい...
-
scanfが2回使えない・・・?;
-
C言語でgetchar();が上手く使え...
-
WindowsでEOF
おすすめ情報