戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
InputBoxの入力形式の判定について

    [191945] InputBoxの入力形式の判定について-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ VB -(2020/05/12(23:15))
    □U R L/
      InputBoxの入力形式の判定についてお聞きします。
      以下のコードでInputBoxに入力されたものが
      例:2020-01-01T09:00:00かどうかを判定するには
      どのようなコードになるのでしょうか?
      
      
      
      Sub test()
      
        Dim Ans As String
        Dim flg As Boolean
      
        flg = False
      
        Do
          Ans = InputBox("指定した入力形式で入力して下さい!" & vbLf & _
                         "入力形式:2020-01-01T09:00:00", _
                         "Title", _
                         "2020-06-01T09:00:00")
          
          If StrPtr(Ans) = 0 Then
            MsgBox "中止します!"
            Exit Sub
      
          Else
            If IsNumeric(Ans) Then '仮に数字です
              flg = True
            Else
              MsgBox "入力形式が違います!"
            End If
      
          End If
        Loop Until flg = True
      
        MsgBox "指定した入力形式です!"
      
      End Sub
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191946] Re[1]: InputBoxの入力形式の判定について-

    記事引用/メール受信=OFF■

    □投稿者/ 下書き退助 -(2020/05/13(06:29))
    □U R L/
      If IsNumeric(Ans) Then '仮に数字です
      の部分が
      If Ans Like "####-##-##T##:##:##" And IsDate(Replace(Ans, "T", " ")) Then
      という感じでしょうか・・・
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191950] Re[2]: InputBoxの入力形式の判定について-

    記事引用/メール受信=OFF■

    □投稿者/ VB -(2020/05/13(17:42))
    □U R L/
      下書き退助様
      
      コードありがとうございます。
      ばっちりでした。
      
      それでこれを応用してVBSでも使えるように
      正規表現でも同じことはできますでしょうか?
      
      以下コードです。
      
        Dim Ans As String
        Dim flg As Boolean
        Dim RE As Object
      
        Set RE = CreateObject("VBScript.RegExp")
      
        RE.Pattern = "^####-##-##T##:##:##$" 'ここがわからない
      
        flg = False
      
        Do
          Ans = InputBox("指定した入力形式で入力して下さい!" & vbLf & _
                         "入力形式:2020-01-01T09:00:00", _
                         "Title", _
                         "2020-06-01T09:00:00")
      
          If StrPtr(Ans) = 0 Then
            MsgBox "中止します!"
            Exit Sub
      
          Else
            'If Ans Like "####-##-##T##:##:##" And IsDate(Replace(Ans, "T", " ")) Then
              
            If RE.test(Ans) Then 'ここがわからない
              flg = True
            Else
              MsgBox "入力形式が違います!"
            End If
      
          End If
        Loop Until flg = True
      
        MsgBox "指定した入力形式です!"


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191952] Re[3]: InputBoxの入力形式の判定について-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2020/05/13(19:32))
    □U R L/
      VBSにもIsDate関数があるようなので、
      形式チェックだけなら、
      RE.Pattern = "^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$"
      でよいと思います。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191958] Re[4]: InputBoxの入力形式の判定について-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2020/05/14(07:33))
    □U R L/
      追記します。
      
      単に\dだけを使ったものではチェックしたことにならないということでしょうかね。
      
      もちろん、数値範囲を限定することも可能でしょう。
      
      (1)
      例えば、時(Hour) については、"[0-1]\d|2[0-3]"のような範囲指定をすることができます。
      分、秒も同様にして対応できます。
      
      (2)
      年、月、日は、それぞれについて、範囲を限定することも簡単にできます。
      しかし、2月30日は除外するとか、実際にありうる組み合わせパターンを網羅することは、
      閏年対応、大の月小の月などを考えると、可能ではあるが、極めて煩雑なものになります。
      (下記の記事(*)を参照のこと)
      これよりも、IsDataを使ったほうが簡潔な処理になると思いました。
      
      どうしてもということであれば、下記サイトを参考に修正されたらよいでしょう。
      「否定先読み」は、 VBScriptの正規表現でも対応していますから使えます。
      
      ht tps://qiita.com/plasma0713/items/6f1b8172080bbc13ebc4
      にyyyy-mm-ddのケースがありました。
      
      ^(?!([02468][1-35-79]|[13579][013-57-9])00-02-29)((\d{4}-(01|03|05|07|08|10|12)-(0[1-9]|[12]\d|3[01]))|(\d{4}-(04|06|09|11)-(0[1-9]|[12]\d|30))|(\d{4}-02-(0[1-9]|1\d|2[0-8]))|(\d{2}([02468][048]|[13579][26])-02-29))$
      だそうです。
      
      ------------------
      (*)例えば、下記のような、極めてパズルのようなものになってしまう。
      「yyyymmdd形式日付文字列の妥当性をチェックする正規表現を読み解く」
      ht tps://qiita.com/shojit/items/c633a329dbbcc56923d6
      




    [191959] Re[5]: InputBoxの入力形式の判定について-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ VB -(2020/05/14(10:19))
    □U R L/

      γ様
      コードありがとうございます。
      1つめは、ばっちりでした。
      2つめは、修正して試してみます。
      ありがとうございました。




    [191986] Re[6]: InputBoxの入力形式の判定について-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2020/05/15(20:15))
    □U R L/
      書いてみました。参考にしてください。
      
      Function check(s As String) As Boolean
          Dim re  As Object
          Dim yyyymmdd$, hhmmss$
          
          Set re = CreateObject("VBScript.RegExp")
          
          yyyymmdd = "(?!([02468][1-35-79]|[13579][013-57-9])00-02-29)" _
                   & "((\d{4}-(01|03|05|07|08|10|12)-(0[1-9]|[12]\d|3[01]))|" _
                    & "(\d{4}-(04|06|09|11)-(0[1-9]|[12]\d|30))|" _
                    & "(\d{4}-02-(0[1-9]|1\d|2[0-8]))|" _
                    & "(\d{2}([02468][048]|[13579][26])-02-29))"
          
          hhmmss = "(?:[0-1]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)"
          With re
              .Pattern = "^" & yyyymmdd & "T" & hhmmss & "$"
              check = .Test(s)
          End With
      End Function
      
      If RE.test(Ans) Then
      の代わりに
      If check(Ans) Then
      とします。
      
      ちなみに、(?: は"部分マッチの記憶不要"を意味します。
      私は基本的に入れることにしていますので、本来は、
      yyyymmddのほうにもそれを入れないと一貫しない。
      ただ、更に見づらくなるだけなので今回は入れていません。
      別に部分マッチの取り出しは必要ないので。
      
      なお、例えば、
      "(\d{4})\-(\d{2})\-(\d{2})T(\d{2}):(\d{2}):(\d{2})"
      と概括的な形式チェックをしておいて、
      どの部分で間違っているか(例:25時など)などを知らせようとすれば、
      部分マッチを取り出して、数値範囲チェックすることになりますね。
      不十分なチェックではありますが。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G