• 締切済み

日付の重複した場合にエラー表示をさせたい。

以下の記述の場合、日付の重複をしてもエラーが出ません。 文字の重複はちゃんと、エラーがでました。 どのように書き換えたら、日付の重複に対してエラーが出るのか教えていただきたいです。 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

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 そのご質問ですと、ちょっと回答側は厳しいですね。 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

kennpon
質問者

お礼

ありがとうございました。 問題解決です。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

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) のようにする方がうまくいくと思います。

kennpon
質問者

補足

ありがとうございます。 テキストボックスに入力した日付を、いったんセルに(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

関連するQ&A