[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『起算日より前なら警告を出したい』(yamato)
5行目以降でデータがあります
G、R列に
G R
起算日 終了日
という表があります。
それずれ同じ列の比較になります。が
カレンダーフォームからそれぞれ日付を入力します
質問は以下の内容です。
起算日より以前の日付をR列終了日に入力してしまった場合
警告をMsgboxで"入力に誤りがあります"と出すこと可能でしょうか?
よろしくお願いします。
また
起算日から入力を一般的に行いますが、まれに起算日を入力忘れの時
R列入力時同じように"起算日が未入力です"と表示したいのですが
重ねてお願いします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
すでに回答がありますが、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つですね。
・私がコメントしたこと(それ以外にもあるかもしれません)、操作の流れを整理し、その流れの中で どのような不都合が生じるかをまとめあげて、それらをすべてかいしょうすべく、判定ロジック(順番や条件含め) をしっかりと、yamatoさん自身が作り上げて、あらためて要件として提示する。
・なんとなく、入力者の喚起をうながすだけでいいような気がします。なので、???さんが言われるように 単純な色付けのみを行い、色がついたところを、入力者が、自分でチェックして訂正する。
個人的には、後者(???さんの提案)がいいと思います。
(β) 2016/09/06(火) 13:01
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
(yamato) 2016/09/07(水) 18:45
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.