• ベストアンサー

特定の値をチェックしたいのですが…

VB2005、DB2環境です。 日付の値を取得する処理があるのですが、稀に通常ではあり得ない 値が入っていることがあります。 例えば、yyyymmdd形式にするべきところに、20070100だとか、 000000だとか、20007/001/01だとか。 パターンとしては、下二桁が00になっているもの、桁数が8桁より 多いもの、の2つがほとんどなのですが、このような値を取得した 場合は、2007/01/01としたいと思っています。 まず条件式を作らなければならないと思うのですが、この、下二桁は 0で他はランダムである値と、8桁より多い数というものは、どのように 判別させれば良いのでしょうか? 出来ましたら、サンプルコードを交えて教えていただけないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • basket11
  • ベストアンサー率83% (5/6)
回答No.3

No2のimogasiさんと同様にテキストボックスとコマンドボタン1つFormに配置して下さい。 以下のsampleをコピー&ペーストしてご利用下さい。 Private Sub Command1_Click() 'ワーク Dim work_str As String '取得した日付の下2桁を取得する。 work_str = Mid$(Me.Text1.Text, Len(Me.Text1.Text) - 1) '取得した日付が8文字(yyyymmdd形式)以外である。または '下2桁が00である場合は、2007/01/01を表示する。 If Len(Me.Text1.Text) <> 8 Or "00" = work_str Then MsgBox "NG 1 [2007/01/01]" Exit Sub End If '取得した日付をyyyy/mm/dd形式に変換し 'IsDate関数で日付として問題無いかチェックする。 '問題が有る場合は、2007/01/01を表示する。 work_str = Format$(Me.Text1.Text, "####/##/##") If IsDate(work_str) = False Then MsgBox "NG 2 [2007/01/01]" Exit Sub End If End Sub こんな感じでいかがでしょうか?

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

テキストボックス1つ、コマンドボタン1つ テキストのMaxLengthを10 2007/8/12式の/入りの入力方法を強制ルールとする。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim s Dim t s = TextBox1.Text t = Split(s, "/") If UBound(t) <> 2 Then MsgBox("ERR") Exit Sub End If MsgBox(s) If IsDate(s) Then MsgBox("OK") Else MsgBox("NO") End If End Sub これで、変な日付データの入力は防げそうですが。

noname#78947
noname#78947
回答No.1

どうせなら下二桁や文字数で判断するよりもIsDate関数を使って日付型に変換できるかで判断したほうが良いのでは?こちらのほうが条件式が単純ですよ?一応、サンプルコードを載せておきます。 Dim Date_Str As String Date_Str = Format(日付の値, "####/##/##") If Microsoft.VisualBasic.IsDate(Date_Str) = False Then 日付として正しくない場合の処理 End If 上記の処理だと文字数が8文字ちょうど意外は全て条件文で引っかかります。下二桁が00の場合などの日付としておかしい場合もです。他には2月29日の有る無しを判断できるのでうるう年じゃないときの入力ミスもなくなります。一度試してみてください。

関連するQ&A