• 締切済み

エクセル VBAで入力確認

入力フォームに入力した日にちが、「月別」ワークシートに既に入力されて いる場合にメッセージダイアログ「error」を表示するようにしたいと 思っています。 ワークシートの参照は下記です。 Select Case 月.Value Case Is = 4 Worksheets("4月").Activate 新しいデータの入力は下記です。 Dim r As Long r = Range("B65536").End(xlUp).Row Set targetCell = ActiveSheet.Cells(r, 1) ワークシートの参照の次に日にちの確認を入れればいいと思うのですが、 やり方がわかりません。 ちなみに月別シート「C列」に日にちが入ります。 よろしくお願いします。

みんなの回答

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

こんにちは。 分からないのは、どこまで、できているのかっていうことだと思いますね。 >r = Range("B65536").End(xlUp).Row なぜ、B列を探しているのか、また、B列とのC列の因果関係も分かりません。 「入力フォーム」って、どんなもので、どのように、シートを選択しているのとか、そうした部分が分からないので、結局、こちら側としては、想像して、キメウチにしかできません。 Sheet1 に、コントロールツールの TextBox1 を設けます。 日付を入力すれば、シートがあれば、そのシートのC列を検索します。 なお、この状態のままの質問では、Find メソッドでは、うまくいかない恐れがありますので、あえて、Match 関数で、シリアル値を探すような方法にしました。 ご自身に合うように、ご自身で直してください。 '---------------------------------------------------- 'シートモジュール '----------------------------------------------------- Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim myDate As Variant Dim myMonth As Integer Dim i As Long  If KeyCode <> 13 Then Exit Sub  myDate = TextBox1.Text  If Not IsDate(myDate) Then MsgBox "それは日付ではありません", 32: Exit Sub  If Len(myDate) - Len(Replace(myDate, "/", "")) <> 2 Then MsgBox "yy/mm/dd のスタイルで入力してください", 32: Exit Sub  myDate = CDate(myDate)  myMonth = Month(myDate)  On Error GoTo EndLine  With Worksheets(CStr(myMonth) & "月")   On Error Resume Next   i = 0   i = WorksheetFunction.Match(CLng(myDate), .Columns(3), 0)   On Error GoTo 0  If i > 0 Then   MsgBox "err: Inputed date was already inputed!"  Else   i = .Range("C65536").End(xlUp).Row   Application.Goto .Cells(i + 1, 3) 'C列の最終行の次のセル  End If  End With EndLine: End Sub

anpan_32
質問者

お礼

Wendy02様、ありがとうございました。 無事解決できました!! 本当に本当にありがとうございました!

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

何をされたいのかよく分からないのですが、メッセージダイアログで実現するのではなく、TextBoxのChangeイベントで入力フォームで日付を入力したタイミングにエラーメッセージを出す方が良いのではないでしょうか なお以下のマクロはC列にB2と同じ値があるかどうかを判定するものです。ご参考まで… Sub Macro1() Dim rng As Range  Set rng = Columns(3).Find(Range("B2").Value)  If rng Is Nothing Then   MsgBox ("ヒットしません")  Else   MsgBox ("ヒットしました")  End If End Sub

anpan_32
質問者

補足

講習を実施した時間の集計をしたいのです。複数の人が入力します。 で、入力フォーム上に「月・日・講習項目」をプルダウンで選択するように しています。既に入力済みの日にちを再度入力した場合に「入力済み」と いったメッセージを表示させたいのです。 だから、日にちを入力した際に、 月別シートの「C列」で重複が無いかを確認すればいいのかなあと 思ったです。。。

関連するQ&A

専門家に質問してみよう