• ベストアンサー

テキストボックスの入力チェック。

Version 6.0 です。 テキストボックスに入力された値の中に任意の文字があるかどうかを判断する関数というのはあるでしょうか?InStrとかでやってみたのですが、If文を繰り返すことになってしまい、見難い状況です。 2つのテキストボックスに年月を入力させ、 "yyyymm"、"yyyym"、"yyyy/mm"、"yyyy/m" が入力可。入力した文字列に"/"があるかないかを判断し、あればそのままでIsDateでチェック。なければ、"/"を入れてIsDateでチェック、とさせたいです。 何か簡単なコードの書き方等あれば、ぜひ教えてください。分かり難いところがあれば、補足します。よろしくお願いします。

noname#5349
noname#5349

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 ちょっと長い気もしますが。 フォーム上に、Text1とCommand1があるとします。 Private Sub Command1_Click()   Dim temp As String   Dim p As Long   Dim pp As Long   Dim ppp As Long   temp = Text1.Text   p = InStr(1, temp, "/", vbTextCompare)   If p <> 5 And p <> 0 Then     MsgBox "区切り記号位置エラー"     Exit Sub   End If   pp = Len(temp)   temp = Replace(temp, "/", "", , , vbTextCompare)   ppp = Len(temp)   If pp - ppp > 1 Then     MsgBox "区切り記号位置エラー"     Exit Sub   End If   If Len(temp) < 5 Or Len(temp) > 6 Then     MsgBox "桁数エラー"     Exit Sub   End If   temp = Left(temp, 4) & "/" & Mid(temp, 5)   If IsDate(temp) Then     MsgBox "日付データ" & vbCrLf & Format(temp, "yyyy/mm")   Else     MsgBox "日付と認識出来ない"   End If End Sub あとは、適当に応用して下さい。

noname#5349
質問者

お礼

お礼が遅くなってしまって申し訳ありませんでした。 そして、早速の回答ありがとうございました。 やはりたくさんのIf文で判断していくことになるんですね。 教えていただいたコードを元に書いてみたいと思います。 ありがとうございました。

その他の回答 (2)

  • Taketoshi
  • ベストアンサー率41% (23/56)
回答No.3

#2のものです。 ちょっとまちがってましたね。 修正版です。 Dim wstr As String Dim wYear As Integer Dim wMonth As Integer Dim wDate() As String wstr = txtDate.Text '入力チェック If IsNumeric(Replace(wstr, "/", "")) = False Then MsgBox "入力ミス" GoTo Error End If If Len(wstr) < 5 Then MsgBox "入力ミス" GoTo Error End If '年/月取得 '/が存在しない If InStr(1, wstr, "/") = 0 Then wYear = CInt(Mid(wstr, 1, 4)) wMonth = CInt(Mid(wstr, 5)) '/が存在する Else wDate = Split(wstr, "/") If wDate(0) = "" Then MsgBox "年入力ミス" GoTo Error End If If wDate(1) = "" Then MsgBox "月入力ミス" GoTo Error End If wYear = CInt(wDate(0)) wMonth = CInt(wDate(1)) End If If IsDate(wYear & "/" & wMonth) = False Then MsgBox "年月入力ミス" End If

noname#5349
質問者

お礼

二度もありがとうございます。 そして、お礼が遅くなってしまって申し訳ありません。 教えていただいたコードを元に書いてみたいと思います。

  • Taketoshi
  • ベストアンサー率41% (23/56)
回答No.2

任意の箇所に"/"を入れるわけではないですが、年と月を分離することで、日付チェックが可能だと思います。 以下のコードを参考ください。 Dim wstr as String Dim wYear as Integer Dim wMonth as Integer Dim wDate() as String wstr = txtDate.text '入力チェック If IsNumeric(wstr) = False Then MsgBox "入力ミス" GoTo Error End If If Len(wstr) < 5 Then MsgBox "入力ミス" GoTo Error End If '年/月取得 '/が存在しない If InStr(1, wstr, "/") = 0 Then wYear = CInt(Mid(wstr, 1, 4)) wMonth = CInt(Mid(wstr, 5)) '/が存在する Else wDate = Split(wstr, "/") wYear = CInt(wDate(0)) wMonth = CInt(wDate(1)) End If If IsDate(wYear & "/" & wMonth) = False Then MsgBox "年月入力ミス" End If

関連するQ&A

  • テキストボックスに入力するとチェックボックスのチェックが入るようにするには

    Excelのユーザフォームについて質問させていただきます。 チェックボックスとテキストボックスがそれぞれ複数あります。 テキストボックスに入力すると、横にあるチェックボックスに 自動的にチェックが入るようにしたいのですが、 どのようにすればいいのでしょうか。        

  • テキストボックスに「00000」を入力すると「0」になってしまう

    あるテキストボックスには5桁の半角数字を入力させるようにしたいと思っています。 このテキストボックスには以下の入力チェックをかけていますが、「00000」を入力すると「0」と判断されてしまい。一つ目のチェックに引っかかってしまいます。 これを文字列として判断する方法はありますか? または、以下のチェックに引っかからない方法はありますか? よろしくお願いいたします。 (codeにはvalueが入っています。) if(code == 0){ alert("入力してください。"); return false; } if(isFinite(code) == false){ alert("半角数字を入力してください。"); return false; } if(code.length != 5){ alert("5桁入力してください。"); return false; }

  • Accessテキストボックスの未入力チェック

    いつも参考にさせて頂いております。 Accessテキストボックスの未入力チェックで上手くいかず悩んでいます。過去の情報等調べましたが、わかりませんでした。 どなたか宜しくお願い致します。 フォーム1にテキストボックス1、ボタン1があります。 テキストボックスを何も入力せず、Enter等で移動する時にチェックをかけたいです。 もし、テキストボックスに何も入力がなかったら、メッセージを出し、フォーカスをテキストボックスに戻す。 何か入力があれば、ボタンにフォーカスが移動する。 If IsNull(Me.テキストボックス1) = "" Then msgbox "未入力です。" Me.テキストボックス1.SetFocus End If 宜しくお願い致します。

  • チェックボックスの入力チェック

    フォームメール用のCGIを作成しているのですが、チェックボックスの入力チェックをCGIでおこないたい場合、どのようにすればよいのでしょうか? 複数選択可で1つも選択されていない場合エラーメッセージを出すようにしたいと思っており、チェックボックスには1個づつ個別の変数を用意しています。 if ($name eq "") { print "Content-type: text/html;charset=euc-jp\n\n"; print "お名前を入力してください。"; exit(0); } テキストボックスはこのように入力チェックをおこなっています。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • テキストボックスの入力値チェックについて

    テキストボックスに入力した値に対して半角カナで入力されているかのチェックをコマンドボタン押下時に行いたいのですが、 どのようなコードを書けばよろしいのでしょうか? ついでに、半角数字のみのチェックも教えてください。

  • テキストボックスの内容でチェックボックスの既定値

    下記質問の続きです。 http://okwave.jp/qa/q8186736.html Accessで、 チェックボックスにチェックを入れることで テキストボックスに文字を表示させています。 そのフォームをいったん閉じると、 テキストボックスには 前回チェックボックスで入力した文字が反映されているのですが チェックボックスのチェックがすべて外れてしまっています。 フォームを開いたとき、 テキストボックスの内容によって、 配置したチェックボックスにチェックを入れたいです。 テキストボックスに 「A C」 と入っていたら ■A □B ■C □D □E としたいです。 (開いたあとは、また別の所にチェックを入れたり外したりします) チェックボックスのプロパティ「既定値」のところに IF([テキストボックス] like "*"&"A"&"*",ture,false) などとしてみたのですがうまういきませんでした。 ご教授お願いいたします!

  • VBS Webのテキストボックスに入力

    VBSでWEB上の指定したページの複数のテキストボックスに特定の文字を入力するコードを作成しています。しかし、テキストボックスに文字がすでに入力されていると、上書きされてしまいます。テキストボックスに文字が入力されているか判断して、入力されていれば文字を入力しない。また、入力されていればその続きに文字を入力する方法はあるのでしょうか?あるならば方法を教えて欲しいです。

  • エクセルVBA フォームのテキストボックスの入力規則

    エクセル2000を使用しています。 VBAでフォームを作成しています。日付の入力項目をテキストボックスで 作りたいのですが、”yyyy/mm/dd”の形式で入力するようテキストボックスの中に表示し、それ以外の入力形式を制限するにはどのようにしたらよいでしょうか。

  • エクセルのユーザーフォームのテキストボックスに日付が入力できない

    いつもお世話になります。初心者ですのでよろしくお願いします。 初めてエクセルのユーザーフォーム作成に挑戦しています。 フォームに日付を入力するためのテキストボックスを配置したのですが、yyyy/m/dで入力しようとして2006/8まで入力すると勝手に2006/8/1/と入力されてしまいます。2006/8/25と入力できるようにするにはどうしたらよろしいでしょうか? よろしくお願いします。

  • テキストボックスの入力チェック(ACCESS VBA)

    テキストボックスに何かを入力し、フォーカスが他のものに移動したときに、LostFocusイベントで入力内容のチェックをかけています。(文字数チェック、ストアドをつかって入力内容と一致するものがDBにあるかなど) もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい(setfocusを使用)のですが、setfocusをしてもlostfocusされてしまうため、うまくいきません。 VBではValidateイベントというものがあるようですが、 VBAではみあたりません。 どなたかよい方法をご存知でしたら教えてください。

専門家に質問してみよう