Excel VBA質問箱 IV

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

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


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

【39806】日付のチェック方法 hito 06/7/1(土) 17:43 質問[未読]
【39808】Re:日付のチェック方法 ichinose 06/7/1(土) 18:45 発言[未読]
【39824】Re:日付のチェック方法 hito 06/7/2(日) 0:54 お礼[未読]
【39812】Re:日付のチェック方法 たけ 06/7/1(土) 21:23 発言[未読]
【39819】Re:日付のチェック方法 hito 06/7/1(土) 23:38 発言[未読]
【39822】Re:日付のチェック方法 たけ 06/7/2(日) 0:03 発言[未読]
【39825】Re:日付のチェック方法 hito 06/7/2(日) 0:58 お礼[未読]

【39806】日付のチェック方法
質問  hito  - 06/7/1(土) 17:43 -

引用なし
パスワード
   いつもお世話になっております。

日付のチェックをおこなう際に、ISDATEを使えば、
文字列("2006/1/1"など)の日付チェックは出来るのですが、
そうではなく、日付値のデータを日付値のデータかどうか
チェックしたいです。

入力データに対するチェックなのですが、
入力規則でチェックはさせず、VBA上でチェックを
したいです。

とっても簡単なやり方がある気がして仕方がないのですが
自分なりに調べたところでは、見つかりませんでした。。。

よろしくお願いいたします。

【39808】Re:日付のチェック方法
発言  ichinose  - 06/7/1(土) 18:45 -

引用なし
パスワード
   ▼hito さん:
こんばんは。


>
>日付のチェックをおこなう際に、ISDATEを使えば、
>文字列("2006/1/1"など)の日付チェックは出来るのですが、
>そうではなく、日付値のデータを日付値のデータかどうか
>チェックしたいです。
セルにDate型で入力されているかということでしょうか?
それとも日付(Date型)に変換可能なという意味でしょうか?
(でも、これだと正の数は全部Trueですよね)


新規ブックの標準モジュールに

'==========================================
Sub main()
  With Range("a1")
   .NumberFormatLocal = "yyyy/m/d"
   .Value = "2006/7/1"
   Call 判定も色々♪(.Cells(1))
   .NumberFormatLocal = "ge.m.d"
   Call 判定も色々♪(.Cells(1))
   .NumberFormatLocal = "gge.m.d"
   Call 判定も色々♪(.Cells(1))
   .NumberFormatLocal = "yyyy/m/d h:mm AM/PM"
   Call 判定も色々♪(.Cells(1))
   .NumberFormatLocal = "G/標準"
   Call 判定も色々♪(.Cells(1))
   
   .NumberFormatLocal = "@"
   .Value = "2006/7/1"
   Call 判定も色々♪(.Cells(1))
   End With
End Sub
'======================================================
Sub 判定も色々♪(rng As Range)
  MsgBox rng.Text & vbCrLf & TypeName(rng.Value) & _
           vbCrLf & VarType(rng.Value) & _
           vbCrLf & IsDate(rng.Text) & _
           vbCrLf & IsDate(rng.Value)
  
End Sub


mainを実行してみて下さい。

どれかが採用出来ますか?

【39812】Re:日付のチェック方法
発言  たけ  - 06/7/1(土) 21:23 -

引用なし
パスワード
   >日付のチェックをおこなう際に、ISDATEを使えば、
>文字列("2006/1/1"など)の日付チェックは出来るのですが、
>そうではなく、日付値のデータを日付値のデータかどうか
>チェックしたいです。

日付チェックではなく、日付値のデータかどうかチェックしたい?
意味が分からないですね。

データが日付データとして使えるかどうかを調べたいってこと?
だったらIsDateでできるよね?
そんなことじゃないんだろうな・・・

何度読み返してみても質問の意図が分からないっす

【39819】Re:日付のチェック方法
発言  hito  - 06/7/1(土) 23:38 -

引用なし
パスワード
   たけさん

お返事ありがとうございます。
わかりにくくて、すみません。。。汗

セルを書式で、日付としてあります。

1.数字の1を入れると、1900/1/1が表示されます。
2.38718と入れると、2006/1/1になります。
3.1111111は表示されません。
4.文字のaも入力はでき、その場合はaです。
5.空白(入力なし)は、""だと思います。

そして、その状態で、入力規則は使わずに、
VBAを使って、1.2.5.はOK!それ以外は
NGという判断をしたいです。

こんな感じなのですが、意味が通じるでしょうか、、、汗

よろしくお願いいたします。


▼たけ さん:
>>日付のチェックをおこなう際に、ISDATEを使えば、
>>文字列("2006/1/1"など)の日付チェックは出来るのですが、
>>そうではなく、日付値のデータを日付値のデータかどうか
>>チェックしたいです。
>
>日付チェックではなく、日付値のデータかどうかチェックしたい?
>意味が分からないですね。
>
>データが日付データとして使えるかどうかを調べたいってこと?
>だったらIsDateでできるよね?
>そんなことじゃないんだろうな・・・
>
>何度読み返してみても質問の意図が分からないっす

【39822】Re:日付のチェック方法
発言  たけ  - 06/7/2(日) 0:03 -

引用なし
パスワード
   ▼hito さん:
>たけさん
>
>お返事ありがとうございます。
>わかりにくくて、すみません。。。汗
>
>セルを書式で、日付としてあります。
>
>1.数字の1を入れると、1900/1/1が表示されます。
>2.38718と入れると、2006/1/1になります。
>3.1111111は表示されません。
>4.文字のaも入力はでき、その場合はaです。
>5.空白(入力なし)は、""だと思います。
>
>そして、その状態で、入力規則は使わずに、
>VBAを使って、1.2.5.はOK!それ以外は
>NGという判断をしたいです。
>
>こんな感じなのですが、意味が通じるでしょうか、、、汗
>
>よろしくお願いいたします。
>
>
>▼たけ さん:
>>>日付のチェックをおこなう際に、ISDATEを使えば、
>>>文字列("2006/1/1"など)の日付チェックは出来るのですが、
>>>そうではなく、日付値のデータを日付値のデータかどうか
>>>チェックしたいです。
>>
>>日付チェックではなく、日付値のデータかどうかチェックしたい?
>>意味が分からないですね。
>>
>>データが日付データとして使えるかどうかを調べたいってこと?
>>だったらIsDateでできるよね?
>>そんなことじゃないんだろうな・・・
>>
>>何度読み返してみても質問の意図が分からないっす

要するに、入力されたデータが日付データとしてOKなものかどうかの判定ですよね?
IsDateでいいんじゃないですか?
IsDateが空白データをどのような戻りを返してくるのかはやったことないので分かりませんが、もしFalseを返してくるようであれば、IsDateの判定の前に空白かどうかの判定を付け加えればいいだけですよね。

最初の質問で「IsDate・・・そうではなく・・・」といった書き方をしているので分かりづらい質問になってしまうんですよね。

【39824】Re:日付のチェック方法
お礼  hito  - 06/7/2(日) 0:54 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは。

すっすごいです。
まったくしらなかった構文です。。。
読んでも理解できなかったので、とりあえず
実行してみると、、、。

なるほど〜。へぇ〜。感動!でした。

私のイメージからすると、TypeName(rng.Value)
のイメージです。
ただ、この場合、日付値に入りきらない大きい数字
が入った場合は、オーバーフローでエラーに
なってしました。

そして、、、ちょっとお恥ずかしいのですが
たけさんのISDTAEで良いのでは?という
アドバイスを頂いて、試してみると、これが良好。。。

スミマセン、、、。

なぜ、ISDATE以外と拘ったのかと言いますと、
自分で前にテスト?してみたときは、何かが間違って
いたのだと思うのですが、DATE型のデータを
ISDATEに入れてもちゃんとした判定が出来なかったのです。

それで、ISDATEは、文字→日付に変換出来るかどうかの
チェック用関数だと思い込んでいました。

ここがそもそもの出発点(間違い)です。

私の大きな勘違いに対して、親切に回答していただき
大変感謝しています。
また、新しい発見をさせていただいた事にも
大変感謝です。

ありがとうございました!

>▼hito さん:
>こんばんは。
>
>
>>
>>日付のチェックをおこなう際に、ISDATEを使えば、
>>文字列("2006/1/1"など)の日付チェックは出来るのですが、
>>そうではなく、日付値のデータを日付値のデータかどうか
>>チェックしたいです。
>セルにDate型で入力されているかということでしょうか?
>それとも日付(Date型)に変換可能なという意味でしょうか?
>(でも、これだと正の数は全部Trueですよね)
>
>
>新規ブックの標準モジュールに
>
>'==========================================
>Sub main()
>  With Range("a1")
>   .NumberFormatLocal = "yyyy/m/d"
>   .Value = "2006/7/1"
>   Call 判定も色々♪(.Cells(1))
>   .NumberFormatLocal = "ge.m.d"
>   Call 判定も色々♪(.Cells(1))
>   .NumberFormatLocal = "gge.m.d"
>   Call 判定も色々♪(.Cells(1))
>   .NumberFormatLocal = "yyyy/m/d h:mm AM/PM"
>   Call 判定も色々♪(.Cells(1))
>   .NumberFormatLocal = "G/標準"
>   Call 判定も色々♪(.Cells(1))
>   
>   .NumberFormatLocal = "@"
>   .Value = "2006/7/1"
>   Call 判定も色々♪(.Cells(1))
>   End With
>End Sub
>'======================================================
>Sub 判定も色々♪(rng As Range)
>  MsgBox rng.Text & vbCrLf & TypeName(rng.Value) & _
>           vbCrLf & VarType(rng.Value) & _
>           vbCrLf & IsDate(rng.Text) & _
>           vbCrLf & IsDate(rng.Value)
>  
>End Sub
>
>
>mainを実行してみて下さい。
>
>どれかが採用出来ますか?

【39825】Re:日付のチェック方法
お礼  hito  - 06/7/2(日) 0:58 -

引用なし
パスワード
   ▼たけ さん:
こんばんは。

出来てしまいました。。。

ichinoseさんに対するお礼のところにも書いたのですが、
以前、テストしたときに、DATA型のデータをISDATEに
入れてみても、ちゃんとした判定が出来なかったことがあって
(何かが間違っていたのだと思います。)
それで、ISDATE以外という書き方になっていました。

私の大きな勘違いにお付き合いいただき
大変恐縮な気持ちと、大変感謝の気持ちでいっぱいです。

どうも、ありがとうございました。


>▼hito さん:
>>たけさん
>>
>>お返事ありがとうございます。
>>わかりにくくて、すみません。。。汗
>>
>>セルを書式で、日付としてあります。
>>
>>1.数字の1を入れると、1900/1/1が表示されます。
>>2.38718と入れると、2006/1/1になります。
>>3.1111111は表示されません。
>>4.文字のaも入力はでき、その場合はaです。
>>5.空白(入力なし)は、""だと思います。
>>
>>そして、その状態で、入力規則は使わずに、
>>VBAを使って、1.2.5.はOK!それ以外は
>>NGという判断をしたいです。
>>
>>こんな感じなのですが、意味が通じるでしょうか、、、汗
>>
>>よろしくお願いいたします。
>>
>>
>>▼たけ さん:
>>>>日付のチェックをおこなう際に、ISDATEを使えば、
>>>>文字列("2006/1/1"など)の日付チェックは出来るのですが、
>>>>そうではなく、日付値のデータを日付値のデータかどうか
>>>>チェックしたいです。
>>>
>>>日付チェックではなく、日付値のデータかどうかチェックしたい?
>>>意味が分からないですね。
>>>
>>>データが日付データとして使えるかどうかを調べたいってこと?
>>>だったらIsDateでできるよね?
>>>そんなことじゃないんだろうな・・・
>>>
>>>何度読み返してみても質問の意図が分からないっす
>
>要するに、入力されたデータが日付データとしてOKなものかどうかの判定ですよね?
>IsDateでいいんじゃないですか?
>IsDateが空白データをどのような戻りを返してくるのかはやったことないので分かりませんが、もしFalseを返してくるようであれば、IsDateの判定の前に空白かどうかの判定を付け加えればいいだけですよね。
>
>最初の質問で「IsDate・・・そうではなく・・・」といった書き方をしているので分かりづらい質問になってしまうんですよね。

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