- 締切済み
日付の重複した場合にエラー表示をさせたい。
以下の記述の場合、日付の重複をしてもエラーが出ません。 文字の重複はちゃんと、エラーがでました。 どのように書き換えたら、日付の重複に対してエラーが出るのか教えていただきたいです。 On Error Resume Next check = 0 check = WorksheetFunction.Match(TextBox8.Text, Range("業務報告書データ2").Columns(1), 0) On Error GoTo 0 If check > 0 Then MsgBox "この日付は、すでに入力されています。", vbExclamation, "入力エラー" TextBox8.SetFocus Exit Sub End If
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 そのご質問ですと、ちょっと回答側は厳しいですね。 UserForm をお使いになっているのでしょうか?コントロールツールなのでしょうか? それから、 Range("業務報告書データ2").Columns(1) と、名前登録しておいて、その一列目なのでしょうか?ずいぶん、凝った造りなのですが、単に、列数でかまわないのではないでしょうか?それとも、領域は、可変なのでしょうか? 別に、ワークシート関数を使おうが、それ自体は問題ないのですが、まず、TextBox で正しく日付が入れられているかどうか、シリアル値を検索するときに重要になってしまいます。 なお、Match 関数は、内部で数値検索(Value2)しています。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim myDate As Variant Dim Ret As Long If KeyCode <> 13 Then Exit Sub myDate = TextBox8.Text If IsDate(myDate) Then myDate = CLng(CDate(myDate)) On Error Resume Next Ret = 0 Ret = WorksheetFunction.Match(myDate, Range("業務報告書データ2").Columns(1), 0) On Error GoTo 0 If Ret > 0 Then MsgBox "この日付 " & Format$(myDate, "yy/MM/dd") & " は、すでに入力されています。", vbExclamation, "入力エラー" KeyCode = 0 Else '別の作業 End If End If End Sub
- zap35
- ベストアンサー率44% (1383/3079)
TextBox8.Textは文字列を返します。でも日付(型のデータ)はEXCEL内部ではシリアル値です(セルの書式を「標準」にしたときに表示される値) 見かけは同じ 2007/6/9 であっても、全く異なる値ですからMATCH関数では検索できません。 CDate(TextBox8.Text) で日付型に変換してやれば検索に引っかかると思います。無論テキストボックスにはEXCELが「日付」と認識できる形式で文字を入力する必要があります。 ただしEXCELではMATCH関数で日付を検索するときクセがありますので、一旦 CDate(TextBox8.Text) をどこかのセル(仮にAA1)に書き込み、 check = WorksheetFunction.Match(Range("AA1").Value, Range("業務報告書データ2").Columns(1), 0) のようにする方がうまくいくと思います。
補足
ありがとうございます。 テキストボックスに入力した日付を、いったんセルに(a5)にも表示してみて、以下の様にしてみました。 エラー表示でませんでした。 On Error Resume Next check = 0 check = WorksheetFunction.Match(Range("A5").Value, Range("業務報告書データ2").Columns(1), 0) On Error GoTo 0 If check > 0 Then MsgBox "この日付は、すでに入力されています。", vbExclamation, "入力エラー" TextBox8.SetFocus Exit Sub End If
お礼
ありがとうございました。 問題解決です。