• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:少数部の判定)

少数部の判定コードで正しい入力チェック方法は?

このQ&Aのポイント
  • 整数部2桁、小数部1桁まで入力可能なテキストの入力チェック方法について質問です。
  • コンパイルエラーの発生の有無や、入力チェックの方法が正しいかについて確認したいです。
  • また、間違いや改善点があればアドバイスをいただきたいです。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答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

craftx
質問者

お礼

ありがとうございます。 今回別々のエラーメッセージを表示させるのでまとめないでおこうと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答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 とか 打ち込んでみてください。

craftx
質問者

お礼

ご説明ありがとうございます。 たしかに正規表現を使用したほうが便利だと思いますが、 今回は入力チェックのエラーメッセージを使い分けるので使用しないでおこうと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 UBoundの引数が不正、Lengthは配列の要素数なのでLenでないといけない。 If(UBound(a) = 1) Then '小数点が入力されたときはa=1となる If(len(a(0)) < 2) Then

craftx
質問者

お礼

ご回答ありがとうございます。 以下のように修正しましたが、どうでしょうか。 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

  • 入力判定の仕方が分からなくて、困ってます・・

    VB.NETで、キーボードから入力してLabelに表示されている文字と 合っていれば正解、間違っていれば不正解の処理を1文字単位でやりたいのですが、正解不正解の判定のやり方が分かりません・・。 Private Sub Form1_KeyPress() If Mid(Label2.Text, a, 1) = "入力したのと同じ" Then Mid(Label2.Text, a, 1) = ""     a = a + 1 Else  ’不正解の処理 ?? End If End Sub みたいかな?と思ってプログラムを組んでみたのですが、 ifの"入力したのと同じ"ところの書き方が良く分かりません。 詳しい方、KeyPressの使い方等教えていただけませんか?

  • 入力値が小数なら、整数部・小数部の桁チェックをしたい。

    VB2005環境です。 テキストボックスに数値が入力された時、整数部分が4桁以上か、 小数部分が2桁以上になっている場合、警告メッセージを出したいと 考えています。 具体的には、 0.1→OK 99.9→OK 100.1→OK 0.01→NG 1001.9→NG 0.99→NG 1111→NG テキストボックスは数字以外の入力も許可しており、数字を 入力した場合だけのチェックです。 まずIsNumericで数値判定を行っているのですが、その後、上述の 小数桁チェックをどうしたら良いか悩んでいます。 また、99を入力した場合は99.0、09.1と入力した場合には9.1と、 整数部は一番左側に0があれば消し、小数部は未入力ならば".0"を 追加できたらと思っているのですが、うまくいきません。 実現するために必要な処理は、 ・入力値が数値か ・数値であれば、整数か、小数か ・整数部の桁チェック ・小数部の桁チェック(小数時) ・整数であれば、999.9の形になるよう変換 といったところかなと思うんですが、まず小数チェックで 躓いています。 参考にロジックを交えて教えていただけないでしょうか。 宜しくお願いします。

  • VBScript 正規表現で入力された値を判定する

    初めまして。現在VBScriptでプログラムを組んでいるのですが、 どうしても詰まってしまいましたので、ご教授お願いします。 内容は、textboxに入力された値(textbox)を正規表現を用いて 半角数字のみtrue、数字以外の文字が含まれている場合はfalseを返したいと思っています。 if moji_check(textbox)=false then response.write "数字以外が入力されました。<br>"  else      Session("hensuu") = textbox end if function moji_check(strLen) if strLen.pattern("[^0-9]") then moji_check = true else moji_check = false end if end function という風に書いてみたのですが、実行してみると if strLen.pattern("[^0-9]") then 部分のstrLenがオブジェクトが無いと エラーが吐かれてしまいます。 このような場合の対処法を調べてみたのですが、プログラミング自体が不慣れなため わかりませんでした。 よろしくお願いいたします。

  • 少数部の桁数の求め方

    お世話になります。 ExcelデータをADO経由でSQLServerに取込み、その後データの精査を行うプログラムを作成しております。 Excelデータは全てvarchar(255)で構成されたテーブルに投入され、精査が行われます。 ここでつまずいてしまっておりますのは、 ”項目2が小数部8桁以内であること”という条件がありまして、どの様にクエリを 起こせば良いか見当が付かないでおります。 処理はプロシージャ内で行っておりまして、以下の様な作りになっております。 select 項目1, case 項目1の判定結果 end as 結果1, 項目2, case 項目2の判定結果 end as 結果2 into #TableA from TableA (項目1,項目2ともvarchar(255)です) 項目2の小数部が8桁以上はNGとする時の判定方法をご教授いただけますでしょうか。 小数部について OK '.0'~'.99999999' NG '.000000001'~'.000000001.....' 不明な点がございましたら補足させて頂きますので、よろしくお願いいたします。

  • VBAについて質問です

    VBAについて質問です EXCEL2002、SP-2 を使用しています 以下のプログラムで、「0で除算しました」というエラーが出てしまいます strwarareru = 3.5 dblwaru = 0.0005 if (cdbl(strwarareru) mod dblwaru <> 0) then msgbox("割り切れない") else msgbox("割り切れる") end if dblwaru は、小数点以下が何桁になるかわからないので「* 1000」等もできません 「cdbl(strwarareru) mod dblwaru <> cdbl(0)」とやっても同じエラーが出てしまいます すいませんが、エラーにならずにきちんと処理できる方法をお願いします

  • Accessでのvbaについての質問

    Accessでのvbaを使用したプログラムについてお聞きしたいです。前にも似たようなことを質問していましたが、まだうまくいってません。マスタメンテナンス画面を作成しているのですがテキストボックスの入力チェック が上手くいきません。テキストボックス はコードという名前をつけています。 以下のコードでコーディングしています。 未入力チェック関数 Public Function EmptyCheck(Koumoku As Variant) As Boolean '引数で渡された項目が入力されているかチェック If Koumoku = ""Then EmptyCheck = True Else EmptyCheck = False End If End Function 桁数チェック関数 Public Function NumberCheck(Koumoku As Variant, Number As Integer) As Boolean If Len(Koumoku) <>Number Then NumberCheck = True Else NumberCheck = False End If End Function 半角英数字チェック関数 Public Function ZokuseiCheck(Koumoku As Variant) As Boolean If IsNumeric(Koumoku) = False And Not Koumoku Like "[a-z]*"And Len(Koumoku) <>6 Then ZokuseiCheck = True Else ZokuseiCheck = False End If End Function コード処理 Private Sub コード_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then ' If EmptyCheck(コード) = True Then MsgBox "コードを入力してください。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf NumberCheck(コード, 6) = True Then MsgBox "コードの桁数が不正です。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf ZokuseiCheck(コード) = True Then MsgBox "コードの属性が不正です。" コード.SetFocus KeyCode = 0 Exit Sub Else コード.Locked = True End If End If 上手くいかない点は以下の通りです。 1、テキストボックス(コード)の未入力チェックが上手く行きません。テキストボックスが空白の時も""になったりNullになったり変わるのでIf Koumoku = ""ThenにしてしまうとNullになった時処理されずそのまま次のテキストボックスにカーソルが移ってしまう時があります。なんでNullになったり""になったりで変わるのかも謎です。あと空白の時、Koumoku=""で一致しているにも関わらず、Falseで返されてしまい、未入力処理がされません。IsNullを使ってNull値判定してもKoumoku=Nullで一致してるのにFalseで返されました。 2、桁数チェックも上手く行きません。コード処理の方で桁数チェック関数に6という数字を渡して6桁入力としているのですが6桁でもエラーになってしまう時があります。LEN関数でどのように文字数を測っているのかも よくわからないです。 3.これは単純に半角英数字の判定の仕方が間違っているんだと思いますが、やり方がよく分からず、上手く判定できません。 4.これは入力チェックに当てはまるのですがEnterキーを押した時に処理するようにコードを書いていましたが変な結果が出ます。最初にテキストボックスでEnterキーを押して未入力の時に、「コードを入力してください。」とメッセージが出るのはいいのですがその後入力してもまた同じメッセージが出てきます。ほかのテキストボックスをクリックしてカーソルを移さないと同じメッセージが出続けます。桁数や半角英数字チェックの時も同じです。他のカーソルをクリックしないと次の項目のチェックにいかず、同じエラーメッセージが出続けます。何とかほかのカーソルに移さずに修正したら正しく処理が通るようにできないでしょうか。 5、最後に何も問題なかったらテキストボックスにロックかけるよう処理をしているのですが「コントロールの変更を保存していないときはコントロールをロックできません」というエラーメッセージが出てくる時があります。意味が分からず調べても出てこなかったので意味のわかる方何が悪くてエラーになっているのか教えて下さい。 調べてもデバッグしても原因が分からないものばかりです。 長文になってしまいましたがわかる方よろしくお願いします。

  • 整数かどうかチェックする

    テキストボックスに数字を入力させてボタンを押した時、 その数字が1桁の整数(0から9)でなければエラーメッセージを出すようにしたいのですが、何か簡単なコードはありますか? (5.6などの小数や、"a"や"あ"など数字ではない文字が入力された場合も同様にエラーを出したい) 1つずつ0から9までifでチェックしなければいけないのでしょうか。

  • エクセル

    図形の中をクリックする度にとA~Gと変化するコードを以下にて作成しましたがA~Gではなく図形の中に7つの文字(確認要、手続き中など)を表記したいのですがマクロコードがうまくできません。ご教示願います。 Sub 四角形1_Click() a = Array("", "A", "B", "C", "D", "E", "F", "G") ActiveSheet.Shapes("Rectangle 1").Select c = Selection.Characters.Text If Left(c, 1) = a(UBound(a)) Then Selection.Characters.Text = "" Else For i = 0 To UBound(a) - 1 If Left(c, 1) = a(i) Then Selection.Characters.Text = a(i + 1) Exit For End If Next i End If Cells(1, 1).Select End Sub

  • ACCESS テキストボックスの入力値削除

    こんにちは。ACCESSの初心者です。 現在ACCESSを使ってとある一覧表の入力フォーマットを作成しております。 早速ですが質問です。 フォームのテキストボックスにて入力チェックをしており、間違った値が入力されると、メッセージボックスを出し、その間違った入力値を削除し、カーソルをそのテキストボックスに戻す、ようにしたいのですがどうすればいいのでしょうか? ちなみに現在以下のようなソースを作成しているのですが、(1)と(2)のところがどうすればいいのかわかりません。 If 正しい入力値 then 次のテキストボックスへ移動 else msgbox("入力値エラー") 入力値削除(1) カーソルを戻す(2) end if よろしくお願いします。  

  • ExcelVBAで文字列の制御をしたいのですが

    セルに5文字の数字を文字列として取り込む入力規制をしているのですが、現段階では小数点を入力してもチェックにはじかれません。 小数点その他記号等チェックではじきたいので以下のようなマクロを組みました。 Dim A As String  ’値の取得用の変数 Dim i As Integer 'ループカウンタ For i = i To 5 '左からi個の数値を取り出す A = Left(target.Text, i) '取り出した数の右側の文字を検索(小数点があるとすればこの位置) If Len(A) = 2 Then A = Right(A, i) End If If Len(A) = 3 Then A = Right(A, i) End If If Len(A) = 4 Then A = Right(A, i) End If If Len(A) = 5 Then A = Right(A, i) End If '取り出した文字が数値以外ならメッセージを表示 If IsNumeric(A) = False Then Call MsgBox("数値以外が入力されています", vbExclamation) Next これでも何とか希望通りの動きはしたのですが、あまりスマートなプログラムに思えません。 不勉強で申し訳ありませんが、関数で○文字目、ひと文字だけを検索できるもはないのでしょうか? そうすればスマートにいきそうなのですが... このプログラムをもっとスマートな形にできる方法をご存知の方がいらっしゃれば、ご教授お願いします。