質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
date

dateは、date型や日付に関する関数や処理についてのタグです

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

2842閲覧

【型が一致しません】事前対処

ppss

総合スコア40

date

dateは、date型や日付に関する関数や処理についてのタグです

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/10/14 00:13

VBA
Excel

検討内容
ユーザーフォームにテキストボックスを2つ用意し
ユーザーがそれぞれのテキストボックス内に8桁で日付を入力します。
例)2021年10月14日 → 20211014

入力された数字を Date型に格納したいと思っています。

できないこと

ユーザーが【20210931】(2021年9月31日)のような
存在しない日付を入力した際に、
エラー【型が一致しません】が発生します。

相談内容
存在しない日付が入力された際に
メッセージボックスでエラー報告をするのは
どのようなコードになるでしょうか?

ご教示お願い致します。

実際のコードは以下の通りです。

VBA

1コード 2'解析期間のスタート エンドを取得する 3 Dim START0 As String 4 Dim START1 As Date 5 Dim END0 As String 6 Dim END1 As Date 7 8 9 START0 = UserForm1.TextBox1.Text 10 END0 = UserForm1.TextBox2.Text 11 12 If START0 = "" Or END0 = "" Then '文字入力がない 13 MsgBox "入力エラー1:解析期間を入力してください!" 14 Exit Sub 15 16 ElseIf Len(START0) <> 8 Or Len(END0) <> 8 Then '8文字指定じゃない 17 18 MsgBox "入力エラー2:期間は8桁指定してく下さい!" 19 Exit Sub 20 21 Else 22 START1 = CDate(Format(START0, "####/##/##")) 23 END1 = CDate(Format(END0, "####/##/##")) 24 25 End If 26

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

IsDate関数かエラートラップですね。

エラートラップなら下記のような感じ。

vba

1 On Error Resume next 2 START1 = CDate(Format(START0, "####/##/##")) 3 END1 = CDate(Format(END0, "####/##/##")) 4 If Err <> 0 Then 5 MsgBox "入力エラー3:正しい日付を入力してください。" 6 Exit Sub 7 End If 8 On Error Goto 0

投稿2021/10/14 01:16

hatena19

総合スコア33795

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2021/10/14 02:27

END0が正しい書式だとエラーにならないのでは?
ppss

2021/10/14 04:23

ご回答ありがとうございます。 IsDate を活用することでうまくいきました。 エラートラップについて初めて知りました。 大変勉強になりました。ありがとうございます。
hatena19

2021/10/14 04:36

> END0が正しい書式だとエラーにならないのでは? 動作テストしましたが、大丈夫でした。 エラーが出ない場合は、Errを変更しないようです。
sazi

2021/10/14 05:04

@hatena19さん Errオブジェクトはエラーが発生した時のみ生成されるようですね。 逆に、同じスコープ内ではクリアされなければ、残っているという事を意識しておかないと駄目って事で。
guest

0

ベストアンサー

VBA IsDate 関数

これでどうでしょう

投稿2021/10/14 00:18

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppss

2021/10/14 04:22

ご回答ありがとうございます。 IsDate を活用することでうまくいきました。
guest

0

回答頂いた内容より
IsDateを活用し解決

VBA

1コード 2'解析期間のスタート エンドを取得する 3 Dim TEX1 As String 4 Dim TEX2 As String 5 Dim START0 As Variant 6 Dim START1 As Date 7 Dim END0 As Variant 8 Dim END1 As Date 9 10 TEX1 = UserForm1.TextBox1.Text 11 TEX2 = UserForm1.TextBox2.Text 12 13 If TEX1 = "" Or TEX2 = "" Then '文字入力がない 14 MsgBox "入力エラー1:解析期間を入力してください!" 15 Exit Sub 16 17 ElseIf Len(TEX1) <> 8 Or Len(TEX2) <> 8 Then '8文字指定じゃない 18 19 MsgBox "入力エラー2:期間は8桁指定してく下さい!" 20 Exit Sub 21 22 Else '文字列にスラッシュをはめ込む 23 Dim YYYY1 As Variant 24 Dim MM1 As Variant 25 Dim DD1 As Variant 26 Dim YYYY2 As Variant 27 Dim MM2 As Variant 28 Dim DD2 As Variant 29 30 YYYY1 = Left(TEX1, 4) 31 YYYY2 = Left(TEX2, 4) 32 MM1 = Mid(TEX1, 5, 2) 33 MM2 = Mid(TEX2, 5, 2) 34 DD1 = Right(TEX1, 2) 35 DD2 = Right(TEX2, 2) 36 37 START0 = YYYY1 & "/" & MM1 & "/" & DD1 38 END0 = YYYY2 & "/" & MM2 & "/" & DD2 39 End If 40 41 If IsDate(START0) = True And IsDate(END0) = True Then '日付型にできる場合は実行 42 43 START1 = START0 44 END1 = END0 45 46 Else 47 MsgBox "入力エラー3:存在しない日付です" 48 Exit Sub 49 End If

投稿2021/10/14 04:32

ppss

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問