Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13301 / 13644 ツリー ←次へ | 前へ→

【6059】テキストボックスの数値をチェックする りょう 03/6/14(土) 13:16 質問
【6063】IsDate関数 ねこ@京都 03/6/15(日) 4:00 回答
【6064】Re:IsDate関数 りょう 03/6/15(日) 10:30 質問
【6065】Re:IsDate関数 Hirofumi 03/6/15(日) 11:57 回答
【6073】Re:IsDate関数 りょう 03/6/15(日) 17:00 質問
【6074】Re:IsDate関数 Hirofumi 03/6/15(日) 17:59 回答
【6075】Re:IsDate関数 Hirofumi 03/6/15(日) 19:20 回答
【6077】Re:IsDate関数 りょう 03/6/16(月) 0:02 お礼

【6059】テキストボックスの数値をチェックする
質問  りょう  - 03/6/14(土) 13:16 -

引用なし
パスワード
   テキストボックスに4桁の数値を入力するように設定して、
日付を入力するようにしました。(月月日日)のような入力です。
その入力された数値を日付にあたらない数値ならば、違うというようなメッセージを出したいのですが、どのような条件を指定したらよいのでしょうか?
どなたかよい方法がありましたら教えてください。

【6063】IsDate関数
回答  ねこ@京都  - 03/6/15(日) 4:00 -

引用なし
パスワード
   ▼りょう さん:こんばんゎ
>テキストボックスに4桁の数値を入力するように設定して、
>日付を入力するようにしました。(月月日日)のような入力です。
>その入力された数値を日付にあたらない数値ならば、違うというようなメッセージを出したいのですが、どのような条件を指定したらよいのでしょうか?
>どなたかよい方法がありましたら教えてください。
 こんな場合にはisdate関数があります。
 結果をTrue/Falseで返してくれます。

 詳しい使い方はヘルプ見てね  細かい仕様は忘れました^^;

じゃねじゃね

【6064】Re:IsDate関数
質問  りょう  - 03/6/15(日) 10:30 -

引用なし
パスワード
   ねこ@京都 さんありがとうございます。
isdate関数ヘルプをみてやってみたのですが、
西暦の入力が必要なようで難しいようでした。
4桁で月と日のみをチェックできる方法が必要なのですが、
isdate関数でもできるのでしょうか????
初心者なもので申し訳ないです。

> こんな場合にはisdate関数があります。
> 結果をTrue/Falseで返してくれます。
>
> 詳しい使い方はヘルプ見てね  細かい仕様は忘れました^^;
>
>じゃねじゃね

【6065】Re:IsDate関数
回答  Hirofumi E-MAIL  - 03/6/15(日) 11:57 -

引用なし
パスワード
   例えばこんなやり方をしたら?
一応、UserFormのTextBoxのBeforeUpdateイベントで考えて見ました
年の部分を仮にDate(システムの日付 今日)引っ張ってきて
日付の体裁にしてIsDataで調べています
また、必要ないかも知れませんがOkなら、TextBoxにOkの文字列を戻しています
ただ、年の部分をDateで取得しているので、
今年が閏年で無いと0229は日付と見とめられませんが?

Private Sub TextBox1_BeforeUpdate(ByVal Cancel _
                  As MSForms.ReturnBoolean)

  Dim strTmp As String
  
  With TextBox1
    If .Value <> "" Then
      strTmp = Year(Date) & "/" _
            & Left(.Value, 2) _
              & "/" & Mid(.Value, 3)
      If Not IsDate(strTmp) Then
        Beep
        MsgBox "日付と認識できません"
        Cancel = True
      Else
        .Value = strTmp
      End If
    End If
  End With
  
End Sub

【6073】Re:IsDate関数
質問  りょう  - 03/6/15(日) 17:00 -

引用なし
パスワード
   Hirofumiさん、わざわざ考えていただいて大変ありがとうございます。
私がやりたいのは月日のみそれぞれ2桁づつ入力するTextBoxで、
年は入力しなくてもよいようなものです。
例えば、2月3日ならば0203、10月30日なら1030のような形の4桁のTextBoxです。
入力のあとから、その4桁のみで他の処理が必要なため、年の2桁は出力したくないのです。
年の入出力なしで、日付のみのチェックは可能なのでしょうか???

>例えばこんなやり方をしたら?
>一応、UserFormのTextBoxのBeforeUpdateイベントで考えて見ました
>年の部分を仮にDate(システムの日付 今日)引っ張ってきて
>日付の体裁にしてIsDataで調べています
>また、必要ないかも知れませんがOkなら、TextBoxにOkの文字列を戻しています
>ただ、年の部分をDateで取得しているので、
>今年が閏年で無いと0229は日付と見とめられませんが?
>
>Private Sub TextBox1_BeforeUpdate(ByVal Cancel _
>                  As MSForms.ReturnBoolean)
>
>  Dim strTmp As String
>  
>  With TextBox1
>    If .Value <> "" Then
>      strTmp = Year(Date) & "/" _
>            & Left(.Value, 2) _
>              & "/" & Mid(.Value, 3)
>      If Not IsDate(strTmp) Then
>        Beep
>        MsgBox "日付と認識できません"
>        Cancel = True
>      Else
>        .Value = strTmp
>      End If
>    End If
>  End With
>  
>End Sub

【6074】Re:IsDate関数
回答  Hirofumi E-MAIL  - 03/6/15(日) 17:59 -

引用なし
パスワード
   >私がやりたいのは月日のみそれぞれ2桁づつ入力するTextBoxで、
>年は入力しなくてもよいようなものです。
>例えば、2月3日ならば0203、10月30日なら1030のような形の4桁のTextBoxです。
>入力のあとから、その4桁のみで他の処理が必要なため、年の2桁は出力したくないのです。
>年の入出力なしで、日付のみのチェックは可能なのでしょうか???

どうも、私が余計なコードを書いたからか、意味を受け取ってもらえなかった様ですね
IsDateの関数は、完全な日付と受け取れる文字列で無ければチェックでFalseが帰ります
拠って、年が無くては使えません
其処で、仮に年を設定して月日だけをチェックしたらどうかと言う意味で書いたものです
質問者がコードを判断して、必要無ければ以下のコードを修正するだろうと思い載せましたが、此れがいけなかったようですね?
以下のコードを削除して見てください

      Else
        .Value = strTmp

TextBoxには4桁の数字、例えば0615などが残っていると思いますが
此れを、その後の処理に使えば善いのでは?
ただ、

>ただ、年の部分をDateで取得しているので、
>今年が閏年で無いと0229は日付と見とめられませんが?

の問題が残りますが、これはDateの代わりに例えば"2000"等とすれば善いと思いますが?

【6075】Re:IsDate関数
回答  Hirofumi E-MAIL  - 03/6/15(日) 19:20 -

引用なし
パスワード
   仮に年を設定して、日付の体裁を整えIsDateでチェックするのが嫌なら
1行か2行のコードで済む所が
以下のような、馬鹿馬鹿しいコードを書かなければ成らないと思います

Public Function DateChek(strValue As String) As Boolean

  Dim vntMonth As Variant
  Dim vntDay As Variant
  Dim lngCompareDay As Long
  
  If Len(strValue) <> 4 Then
    Exit Function
  End If
  If Not IsNumeric(strValue) Then
    Exit Function
  End If
  
  vntMonth = CLng(Left$(strValue, 2))
  vntDay = CLng(Mid$(strValue, 3))
  
  Select Case vntMonth
    Case 1, 3, 5, 7, 8, 10, 12
      lngCompareDay = 31
    Case 4, 6, 9, 11
      lngCompareDay = 30
    Case 2
      lngCompareDay = 29
'      lngCompareDay = 28
    Case Else
      Exit Function
  End Select
  If vntDay < 1 Or vntDay > lngCompareDay Then
    Exit Function
  End If

  DateChek = True

End Function

【6077】Re:IsDate関数
お礼  りょう  - 03/6/16(月) 0:02 -

引用なし
パスワード
   Hirofumiさん大変ありがとうございました。
自分の思い通りのものができました。
自分の全くの知識の無さから何度も質問してしまい申し訳ありませんでした。

13301 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free