『起算日より前なら警告を出したい』(yamato) 5行目以降でデータがあります G、R列に   G    R 起算日   終了日 という表があります。 それずれ同じ列の比較になります。が カレンダーフォームからそれぞれ日付を入力します 質問は以下の内容です。 起算日より以前の日付をR列終了日に入力してしまった場合 警告をMsgboxで"入力に誤りがあります"と出すこと可能でしょうか? よろしくお願いします。 また 起算日から入力を一般的に行いますが、まれに起算日を入力忘れの時 R列入力時同じように"起算日が未入力です"と表示したいのですが 重ねてお願いします。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- 通勤電車からなので細かいことはかけませんが、 データタブの、「データの入力規則」を使うのはいかがでしょうか。 エラーメッセージも指定できたと思います。 (えくせる1ねんせい) 2016/09/06(火) 07:46 ---- すでに回答がありますが、R列に入力規則設定を行えば、【ある程度】の制御が可能になります。 もちろん R列の変更に対するChangeイベントで処理することでも【ある程度】の制御が可能になるでしょう。 【ある程度】と書きました。 実は、本件、単純そうに見えて、もし、様々な可能性を考慮すると、結構複雑なロジックになりそうです。 たとえば G列に2016/9/1 といれ R列に2016/9/6 といれます。これは正常入力ですからメッセージはでません。 そのあと、G列のセルをDeleteキー等でクリアしたとします。この状態は 起算日未入力 ですよね。 ですから、こういう場合も想定するなら、G列に対しても(入力規則であれChangeイベントであれ)なんらかの判定処理が必要になります。 Changeイベントで処理する場合は、複数セル一括入力(コピペやオートフィル、あるいはセル領域を選択してDeteteキーによる空白化)も考慮が必要ですね。 あるいは、このシートでは一括入力を認めず、単一セルごとの入力を強制することもできますが。 この場合、複数セル一括変更ならメッセージを出して、その入力を取り消し、元に戻すといったことも必要になるでしょう。 (ただし、行削除や行挿入も複数セル変更とみなされますので、これはこれで、まじめにやろうとすれば大変) あまり発生はしないでしょうが、G列とR列が正常に何行か入力されていたとして、その状態で、 ・G列のいくつかのセルをCtrlをおしながら選択してDeleteキーで空白化。 ・あるいはR列のいくつかのセルをCtrlをおしながら選択して、そこに 起算日より小さな日付を一括入力。  (Ctrl/Enter や、あるいは コピペで、この操作は可能です) こうなった場合、メッセージを出して注意を促す対象は1つだけではなく複数ですね。こういった場合は、どのように そのメッセージを出すのか。 こういったことも、考えてみられたらいいかと思います。 ところで、エラーメッセージで注意を喚起するだけでいいのでしょうか? メッセージを出しても、無視されれば、それでおしまい。 それでいいなら、こちらで、どうこういうものではないですけど。 なにより、大小比較や入力有無チェック以前に、G列もR列も データとしては 日付 であることが必要ですよね。 であれば、入力されたものが空白あるいは日付以外ならエラーにするような配慮も必要かもしれませんね。 (β) 2016/09/06(火) 08:31 ---- 連投失礼します。 ↑で、あれやこれやと心配事をメモしました。様々なことを考えると Changeイベントによるマクロ処理ではなく G列、R列に、それぞれ入力規則を設定するのが、確実で簡単かもしれません。 ただし、状況によってエラーメッセージをかえるというのは、ちょっと無理っぽいかも。 それと、空白入力(クリア)は、状況としてエラーになる場合があるわけですが、そのままでは入力規則ではOKとみなされるので そのあたりも、工夫が必要だったような記憶が。 いずれにしても、入力規則については、あまり詳しくないので、専門家さんからの回答をお待ちください。 (β) 2016/09/06(火) 08:41 ---- βさん 返事ありがとうございます。 何か難しそうですね G列空白はあきらめR列にG列以前の入力時警告出す 方向であればchangeイベントで可能でしょうか よろしくお願いします。 (yamato) 2016/09/06(火) 10:35 ---- 面倒な事をせずとも、2つのセルの大小比較し、逆だったならば背景色を赤にでもするような条件付き書式を設定してはいかがでしょうか? 何もメッセージを表示せずとも、真っ赤になれば、何か間違えた!、と気づきますよ。 (???) 2016/09/06(火) 11:20 ---- 方向性としては2つですね。 ・私がコメントしたこと(それ以外にもあるかもしれません)、操作の流れを整理し、その流れの中で  どのような不都合が生じるかをまとめあげて、それらをすべてかいしょうすべく、判定ロジック(順番や条件含め)  をしっかりと、yamatoさん自身が作り上げて、あらためて要件として提示する。 ・なんとなく、入力者の喚起をうながすだけでいいような気がします。なので、???さんが言われるように  単純な色付けのみを行い、色がついたところを、入力者が、自分でチェックして訂正する。 個人的には、後者(???さんの提案)がいいと思います。 (β) 2016/09/06(火) 13:01 ---- Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range For Each c In Intersect(UsedRange, Columns("R")).Cells If IsDate(c) And IsDate(c.Offset(, -11).Value) Then If c.Value < c.Offset(, -11).Value Then MsgBox "入力に誤りがあります。(" & c.Row & "行目)" End If If IsDate(c) Then If Trim(c.Offset(, -11).Value) = "" Then MsgBox "起算日が未入力です。(" & c.Row & "行目)" End If Next c End Sub (mm) 2016/09/06(火) 15:49 ---- (???)さん (β)さん いろんな考えがあるのですね。 試してみます。 (mm)さん ありがとうございます。 また、テスト後報告します。 (yamato) 2016/09/07(水) 04:37 ---- (???)さん (β)さん (mm)さん 全てうまくいきました。 ありがとうございました。 (yamato) 2016/09/07(水) 18:45