- 締切済み
エクセル 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列」に日にちが入ります。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 分からないのは、どこまで、できているのかっていうことだと思いますね。 >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
- zap35
- ベストアンサー率44% (1383/3079)
何をされたいのかよく分からないのですが、メッセージダイアログで実現するのではなく、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
補足
講習を実施した時間の集計をしたいのです。複数の人が入力します。 で、入力フォーム上に「月・日・講習項目」をプルダウンで選択するように しています。既に入力済みの日にちを再度入力した場合に「入力済み」と いったメッセージを表示させたいのです。 だから、日にちを入力した際に、 月別シートの「C列」で重複が無いかを確認すればいいのかなあと 思ったです。。。
お礼
Wendy02様、ありがとうございました。 無事解決できました!! 本当に本当にありがとうございました!