- 締切済み
excelで3つの日付を比較したいです。
excel初心者です。 A,B,C3つの日付があります。 A<B≦Cという関係にしたいです。 もし条件に当てはまらない日付が入力された場合はエラーを表示したいです。 どう設定すればよろしいでしょうか? お手数おかけします。
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- MackyNo1
- ベストアンサー率53% (1521/2850)
>同一セルに複数の入力規則って設定できませんよね…。 いいえ、数式を使った入力規則で複数の条件を設定できます。 そもそも、現在の日付しか入力できない入力規則では40000のような数値などが入力できてしまいます。 日付しか入力できない(=セルの書式が日付書式以外は入力できない)ようにするには、以下のような数式を使った条件付き書式を設定をします(A1セルに設定する場合)。 =AND(LEFT(CELL("format",A2),1)="D",RIGHT(CELL("format",A2),1)*1<6) この条件にB1よりも小さいという条件を加えたい場合は、以下のような数式を設定することになります。 =AND(AND(LEFT(CELL("format",A1),1)="D",RIGHT(CELL("format",A1),1)*1<6),A1<B1) B1セルの入力規則では同様に以下のような数式を設定することになります。 =AND(AND(LEFT(CELL("format",B1),1)="D",RIGHT(CELL("format",B1),1)*1<6),A1<B1,B1<=C1) C1セルも同様に設定してください。
#4です。 > A1,B1,C1セルには日付しか入力できないというようなチェック ご希望をきちんと果たせるような機能がちょっと分かりません。すみません。 次善の策としましては、A~C(先の例ではセルA1~C1)に、日付の書式設定をしておくことがあります。書式を「1997年3月4日」の形式で選んだとします。 そうしておくと、0を入れたら「1900年1月0日」とおかしなことになりますが、1は「1900年1月1日」となります。もちろん、「2015/1/1」と入力すれば(今年については、年を省略でき、「1/1」でも可)、「2015年1月1日」になります。 数字以外、たとえば「a」と入れたりすると文字列となり、エラー判定で再入力が促されます。 もともと、書式の数値、通貨、会計といったものは数字でしかなく、日付の書式も数字です。1900年1月0日から何日目、というもので、小数点以下は時刻となります(日付で入れたセルの書式を標準や数値に変えると分かる)。数字で見え方だけを変えているわけです。入力時には、1997/3/4や1997年月4日等々を数字に変換しているのです。上述しましたように ですので、入力されたものが日付なのかどうかをユーザー側で判定するのは容易ではありません。少なくとも、私では簡単にやれる方法は、今回のご要望については分かりません。すみません。
- mshr1962
- ベストアンサー率39% (7417/18945)
まず各セルの条件を確認 ■Aセル A<B ※Bがブランクの場合はOK A<C ※Cがブランクの場合はOK 1900/1/1~9999/12/31 ※シリアル値では1~2958465 ■Bセル A<B ※Aがブランクの場合はOK B≦C ※Cがブランクの場合はOK 1900/1/1~9999/12/31 ※シリアル値では1~2958465 ■Cセル A<C ※Aがブランクの場合はOK B≦C ※Bがブランクの場合はOK 1900/1/1~9999/12/31 ※シリアル値では1~2958465 以上でいいなら ■A1 =AND(A1>=1,A1<=2958465,OR(A1<B1,B1=""),OR(A1<C1,C1="")) ■B1 =AND(B1>=1,B1<=2958465,OR(A1<B1,A1=""),OR(B1<=C1,C1="")) ■C1 =AND(C1>=1,C1<=2958465,OR(A1<C1,C1=""),OR(B1<=C1,B1=""))
- bunjii
- ベストアンサー率43% (3589/8249)
回答No.5に誤りがありました。 日付の区間ではなくユーザー設定で必要条件をAND関数で括れば良いでしょう。 A1に =AND(A1<B1,A1>=DATEVALUE("1900/1/1"),A1<=DATEVALUE("9999/12/31")) B1に =AND(A1<B1,B1<=C1,B1>=DATEVALUE("1900/1/1"),B1<=DATEVALUE("9999/12/31")) C1に =AND(B1<=C1,C1>=DATEVALUE("1900/1/1"),C1<=DATEVALUE("9999/12/31"))
- bunjii
- ベストアンサー率43% (3589/8249)
なるほど、二つの日付だけをチェックしたいわけですね。エラー表示はポップアップがご希望ということでしたか。 ポップアップウィンドウは、やはりマクロに頼ることになりますが、お勧めできません(マクロを組むと、延々とメンテナンスしなければならなくなりがち)。 もしヘルプからのエラーメッセージで代用できるのでしたら、入力規則を使う方法があります。 「A<B」について、セルA1がA、セルA2がBとします。 1.セルA1をクリックして、メニューの「データ」から「入力規則」を選びます。 2.「設定」タブを選びます。 3.「入力値の種類」で「日付」を選び、「空白を無視する」チェックボックスにチェックを入れておきます(入れておかないと、空白セルが1900/1/1扱いになってしまう)。 4.「データ」を「次の値より小さい」にします。 5.「次の日まで」を「=B1」にします(セルB1をクリックすればよい、この操作では$B$1にならないので、必要があれば$を付ける)。 6.入力時メッセージタブをクリックし、メッセージ(「Bより前の日」等)を入れておくと、このセルを選んだときにメッセージが出ます。 7.エラーメッセージタブをクリックし、「スタイル」は「停止」を選び、エラーメッセージ(「Bより前の日を入力してください」等)を入れておきます。 8.「OK」をクリック。 次にB(セルB1)ですが、C(セルC1)との大小関係「B≦C」も考慮し、次のようにします。 1.セルB1をクリックして、メニューの「データ」から「入力規則」を選びます。 2.「設定」タブを選びます。 3.「入力値の種類」で「日付」を選び、「空白を無視する」チェックボックスにチェックを入れておきます。 4.「データ」を「次の値の間」にします。 5.「次の日から」を「=A1+1」にします(「A<B」にするため1日足しておく)。 6.「次の日まで」を「=C1」にします。 7.入力時メッセージタブやエラーメッセージタブをクリックし、スタイルを「停止」にし、メッセージ(「Aより後で、CかC以前を入力してください」等)を入れておきます。 8.「OK」をクリック。 CはAとほぼ同じです。次のようにします。 1.セルC1をクリックして、メニューの「データ」から「入力規則」を選びます。 2.「設定」タブを選びます。 3.「入力値の種類」で「日付」を選び、「空白を無視する」チェックボックスにチェックを入れておきます。 4.「データ」を「次の値以上」にします(「B≦C」はB=Cでもよいので「以上」)。 5.「次の日付から」を「=B1」にします。 6.入力時メッセージやエラーメッセージタブをクリックし、スタイルを「停止」にし、メッセージ(「Bより後の日を入力してください」等)を入れておきます。 7.「OK」をクリック。 これで、AとBは「A<B」でないとき、Bは「A<B≦C」でないとき、Cは「B≦C」でないとき、再試行かキャンセルを選ぶように表示される設定となります。 なお、上記で「エラーメッセージ」の「スタイル」を「停止」以外にすると、警告が出るが入力はできるようにできます。
- bunjii
- ベストアンサー率43% (3589/8249)
>もし条件に当てはまらない日付が入力された場合はエラーを表示したいです。 >どう設定すればよろしいでしょうか? データの入力規則で「ユーザー設定」を選び論理式を入力します。 A1セルには =A1<B1 、B1セルには =AND(A1<B1,B1<=C1) 、C1セルには B1<=C1 と設定します。 すべてが未入力のときはA1、B1、C1の何れのセルに入力してもエラーは起りません。 2つ目および3つ目の日付を入力すると関係する条件に合わないときは入力エラーの警告ポップアップが出て入力できません。
補足
回答ありがとうございます! ところが、、、既にA1,B1,C1セルには日付しか入力できないというようなデータの入力規則を設定しております。 入力値の種類を日付にして、1900/1/1~9999/12/31の範囲外の値が設定されたらエラーメッセージが出るというような入力規則です。 同一セルに複数の入力規則って設定できませんよね…。 もし、A1,B1,C1セルには日付しか入力できないというようなチェックを入力規則以外でかけられるのでしたら、教えていただいた方法で設定したいと思います。
1.日付を入力したセルでエラー表示したい場合 入力したセルでエラーを表示したいなら、「条件付き書式」でできますが、セルの日付が不正(大小関係を満たさない)のときに、「エラー」といった表示はできず、日付を赤文字・太文字・斜体・取り消し線で表示することしかできません。その点はご了承ください(マクロを組むのは後々まで面倒をみないといけなくなり、お勧めできない) > A<B≦Cという関係にしたいです。 この条件は複数の解釈ができてしまいます。例えば、 A=2015/1/4 B=2015/1/5 C=2015/1/3 だったとき、 A.Cだけがエラーなのか(A、Bは大小関係を満たし、CだけがBに対して小さいのでエラー、つまり「A<B」と「B≦C」を別個に判断する)、 B.A・B・C全部エラーなのか(CがA、Bより小さいので全部エラー、つまり「A<B≦C」をA~C全てについて判断する) といったことが考えられるからです。 とりあえず、「A<B≦C」がBの意味だとして、やり方を申し上げてみます。 AがセルA1、BがセルA2、CがセルA3だとしますが、どの位置のセルに変えても問題ありません。 1)セルA1をクリックし、メニューの「書式」から「条件付き書式」を選ぶ。 2)「条件1」で「セルの値が」「次の値以上」「=$B$1」(注)とする。 3)「書式(F)」をクリックし、好みの書式にする(文字色:赤、太字・斜体、取り消し線、等々)。 4)「追加(A)≫」をクリックする。「条件2」が現われる。 5)「セルの値が」「次の値より大きい」「=$C$1」とする。 6)「書式(F)」をクリックし、好みの書式にする。 7)「OK」をクリックして終える。 (以上、添付図参照ください) 注:セルB1をクリックして選ぶと=$B$1となり、セルA1から他へコピー&ペーストしてもセルB1を参照し続ける。コピー&ペーストやドラッグでセルの参照を変えたいときは、$を消すか、F4を押して行けばよい。$B1なら列Bだけが不変、B$1なら行1だけが不変、B1なら列も行も変わる。 これをセルB1にも行いますが、条件1は以下のようにします(他の操作は同じ)。 2)「条件1」で「セルの値が」「次の値以上」「=$A$1」(注)とする。 同様にセルC1の、条件1、2は以下のようにします(他の操作は同じ)。 2)「条件1」で「セルの値が」「次の値以上」「=$B$1」(注)とする。 5)「セルの値が」「次の値より大きい」「=$A$1」とする。 2.入力したセル以外のセルでエラーを表示したい場合 同じく、AがセルA1、BがセルB1、CがセルC1だとして、エラーを表示したいセルに、 =IF(AND(A1<B1,B1<=C1),"OK","日付が違います") とすればよいです。ただし、どのセルがエラーなのかは分かりません。どのセルがエラーかを判定して表示するのは結構ややこしくなりますので、1と併用してもいいかと思います。
補足
記載が分かりにくく申し訳ございません。 Cだけがエラー(A、Bは大小関係を満たし、CだけがBに対して小さいのでエラー、つまり「A<B」と「B≦C」を別個に判断する)の場合を想定しております。 また、エラー文言をポップアップで表示したいのです。 どうしたらよいのでしょうか?
- 中京区 桑原町(@l4330)
- ベストアンサー率22% (4373/19606)
=if(and(A1<B1,B1<=C1),"","エラー")
補足
回答ありがとうございます。エラーって表示をポップアップで出したいのですが、どうしたらよいでしょうか。 お手数おかけします。
補足
回答ありがとうございます! すみません、以下、もうおひと方への補足コメントと同一で恐縮なのですが、、、、 ところが、、、既にA1,B1,C1セルには日付しか入力できないというようなデータの入力規則を設定しております。 入力値の種類を日付にして、1900/1/1~9999/12/31の範囲外の値が設定されたらエラーメッセージが出るというような入力規則です。 同一セルに複数の入力規則って設定できませんよね…。 もし、A1,B1,C1セルには日付しか入力できないというようなチェックを入力規則以外でかけられるのでしたら、教えていただいた方法で設定したいと思います。