『データ入力と重複データに警告』(なっち) こんにちは、お邪魔します。 いつも、色々な方にご指導・ご教授頂き、とても感謝しておりますm(__)m 今回は、データベースにデータを入力する際に、重複データを入力させない 方法について質問させて下さい。 過去ログを調べたりと、自分なりに設定してみたのですが、希望の結果が得られず 良い方法も浮かばず、悩んでおります・・・(ToT) 下記のようなレイアウトと設定で入力作業を行い、フィルタオプションを使って 別シートに氏名別などの集計結果を抽出しています。 重複しているデータを間違って入力した場合でも気付かず、そのまま抽出してしまう のが悩みなのですが・・・ データベースシート(勤怠管理のデータです) A B C D E F    G 1 月日 曜日 氏名 元請先 現場名 開始 終了 2 6月1日  水 Aさん ○社 現場1 8:00 12:00 3 6月1日  水 Aさん △社 現場2 12:00 15:00 4 6月1日  水 Aさん ○社 現場1 15:00 17:00 5 6月1日  水 Bさん ○社 現場1 8:00 10:00 * 6 6月1日  水 Bさん △社 現場2 8:00 12:00 * 7 6月1日  水 Bさん △社 現場2 12:00 17:00 * A,F,G列は手入力します。 B列は関数で曜日を出しています。 C,E列は入力規則のリストから選択します。(リストの内容は別シートにあります) D列はE列を選択するとVLOOKUPで自動表示されるようにしています。 例えば、データの上から1、2、3行目ですが 6/1に Aさんが 現場1から現場2に行き、また現場1に戻って働いた という感じになっているのですが(この3行のデータには入力ミスはありません) データの4,5,6行目のBさんのデータだと、現場1と現場2に行った、までは 良いのですが、時間帯(開始時刻)がダブっています。 F列には入力規則→ユーザー設定、数式を =SUMPRODUCT(($A$2:A2=A2)*($C$2:C2=C2)*($E$2:E2=E2)*($F$2:F2=F2))=1 と、して 開始時刻の重複するデータが入力されたらエラーメッセージを表示させるように してみたのですが、これでは 8:01 や 9:00と入力されると無効になってしまいます。 当然の結果、時間帯の重複には適用されず、考えに考えた結果が意味無しになって 凹んでいます・・・(ToT) また、C列とE列のリスト選択時に、入力済みデータと同じ日付で同じ名前を選択した 場合、"同じ日付、同じ名前、同じ現場のデータがありますが、"と注意を促すような 事はVBA使うしかないでしょうか・・・? ほとんどが、タイプミスやリスト選択時の間違いなのですが、それをエクセル君に 判断してもらうのは、やはり無理なのでしょうか・・・ 書き込みしていて、だんだん、無謀なことなのかな・・・と思ってきましたが 少しでも入力ミスを改善できればと思い、質問させて頂きますm(__)m 長い文章ですみません。 ---- レスが付かない様なので、、ちょっろっとだけ・・・ A     B    C    D     E    F     G   H      I 月日 曜日 氏名 元請先 現場名 開始 終了 6月1日 水 Aさん ○社 現場1 8:00 12:00 38504Aさん現場1 6月1日 水 Aさん △社 現場2 12:00 15:00 38504Aさん現場2 6月1日 水 Aさん ○社 現場1 15:00 17:00 38504Aさん現場1 6月1日 水 Bさん ○社 現場1 8:00 10:00 * 38504Bさん現場1 6月1日 水 Bさん △社 現場2 8:00 12:00 * 38504Bさん現場2 6月1日 水 Bさん △社 現場2 12:00 17:00 * 38504Bさん現場2 作業列I列に =A2&C2&E2 F2の条件付き書式の数式が =AND(A1=A2,C1=C2,G1>F2) C2とE2の入力規則のユーザー設定に =COUNTIF($I$2:I2,I2)<2 (SoulMan) ---- SoulManさん、 >C,E列は入力規則のリストから選択します。 ですよ! 同一セルに2種類の入力規則って、出来ましたっけ?  ↑本当は、よく知らない。 出来ないと思い込んでるだけかも??? SoulManさんの書き込みを参考にし、入力規則と条件付き書式併用の1案です。 式が長くなって分らなくなるので、大いに作業列を使っています。 I2セルに  =A2&C2  ''以下コピー'' C列の条件付き書式用 J2セルに  =I2&E2  ''以下コピー'' E列の条件付き書式用 K2セルに  =IF(SUMPRODUCT(($I$1:I2=I2)*($F$1:F2<=F2)*($G$1:G2>F2))+COUNTIF(J1:J2,J2)-1>1,FALSE,TRUE) ''以下コピー'' F列の入力規則用 ※COUNTIF部分は、『不要かも?』と思いながらそのままにしてます。 C2セルでの条件付き書式 数式が =COUNTIF($I$1:$I2,$I2)>1  書式-パターン で色をつける ''以下書式コピー'' E2セルどの条件付き書式 数式が =COUNTIF($J$1:$J2,$J2)>1  書式-パターン で色をつける ''以下書式コピー'' F2セルでの入力規則 設定タブ:ユーザー設定を選択し、  数式:=K2=TRUE でエラーメッセージを設定 ''以下入力規則コピー'' EXCELの計算・再計算の構造が、どうなっているかよく分りません。 データ量が多くなった場合を考えると、ここも条件付き書式の方が良いかもしれません。 だから、Manちゃんは条件付き書式にしてたのかな? (sin) ちょっと追記。 ---- >>C,E列は入力規則のリストから選択します。 ですよ! おぉのぉぅ〜〜みすていく。・゚゚・(>_<)・゚゚・。 ナイスフォロ〜〜ありがとうございます。寝てましたぁ(^^; (SoulMan) ---- SoulManさん、sinさん、回答下さりありがとうございますm(__)m 返事が大変遅くなり、とても恐縮なのですが・・・ まだ、提示して下さったものを試す事が出来ずにいます・・申し訳ありませんm(__)m 明日にはご報告が出来ると思いますので、、失礼をお許しください(T_T)m(__)m (なっち) ---- SoulManさん、sinさん、遅くなりました。すみませんm(__)m お二人の方法を試させて頂きました。 結果、実際のデータ入力では、同じ日付でもAさん、Bさんと交互に入力していたので (最初に書いた例のデータのレイアウトの時もあるのですが・・・) 条件が違ってくる為、適用されませんでした(ToT) また、6/1という日付のデータが、別の日付をはさんで離れて入力してる場合も あったりして、難しいです・・・ お二人には、沢山のヒントを頂いていますので、もう少し自分で考えてみようと 思います。(入力の順番も含めて) その上で、解らなくなったら、また質問させて下さい。 宜しくお願いします。 貴重なお時間を使って下さり、ありがとうございました。 (なっち) ---- 実際の入力の状況が私には分りませんが、どのような入力内容であっても対応させたつもりです。 ただ、上の行から順番での入力にのみ対応します。 従いまして、仮に20行まで入力があって、5行目を手直しした場合は、 6行目以降を再度編集する必要があります。(ここの使い勝手が悪いのかな?) 再編集する事を前提にする場合は、全体を見直す必要が有ります。 入力の仕方にどのような事例が考えられますか? (sin) 追記:F列を条件付き書式にすれば、大丈夫かも? その場合は、TRUE→FALSE また、最初のレスに追記しました(''太字''部分) +追記:SUMPRODUCTやCOUNTIF関数の範囲を当初より例えば1000行までに固定しておく。 空白が出るので、SUMPRODUCT関数には、($F$1:$F$1000<>"") の様に追加する必要がありますが・・・ ---- 入力時にすぐチェックしないといけないのでしょうか? 一通り入力が終わってから、ソート(C、A、F列)して、あとはF、G列をチェックするほうが簡単では? はずしてたらごめんなさい(はなまる) ---- うわぁー!!すみません(>_<) sinさん、書き込み下さってたのですね、早速やってみます!! はなまるさん、すみません、、どうしてもデータ入力時にチェックしたいのです。 貴重なご意見ありがとうございますm(__)m (なっち) ---- すみません、sinさん、($F$1:$F$1000<>"") ←これはSUMPRODUCT関数の同じ配列内 に追加するのですか? こんな事聞いて本当に申し訳ありません(>_<) (なっち) ---- 衝突しました。 なっちさん、ゴメンナサイ、↑この件は、ひとまず無視してください。 以下、衝突時の書き込みをそのまま貼り付けます。 色々とシミュレーションしてみました。 最初のは、開始時間のみチェックでしたが、よく考えれば終了時間のチェックも必要でした。当たり前か! 種々のケースを考えると開始・終了時間ともに条件付き書式が良いと考えます。 K列を開始時間、L列を終了時間のチェック用の作業列として K2セルに =IF(SUMPRODUCT(($I$1:$I1=$I2)*($F$1:$F1<=F2)*($G$1:$G1>F2))>0,FALSE,TRUE) L2セルに =IF(F2F2)*($G$1:$G1<=G2))+SUMPRODUCT(($I$1:$I1=$I2)*($F$1:$F1>=F2)*($F$1:$F10,FALSE,TRUE),FALSE) として、ともに下方コピー。 F列(G列)の条件付き書式は、数式が:=$K2=FALSE ( =$L2=FALSE ) で書式指定。以下書式コピー。 では、いかがでしょうか? (sin) ---- sinさーん!!できました!!!凄い\(^o^)/凄い\(^o^)/ 完璧です!! ちょっとだけ最後に条件を追加してみたんですけど、 C,E列の条件付書式の条件1を 数式が  =L2=TRUE  を変えて sinさんの条件を 条件2 にしてみて、開始・終了まで間違いなく入力(L列がTRUEになる) できたら、名前と現場名に付いていた色が消えるようにできました(*^_^*) 凄い嬉しいです!!! 本当にありがとうございます!!!m(__)m (なっち) ---- よかった。よかった。 >名前と現場名に付いていた色が消えるようにできました(*^_^*) 思いもつかなかった私には、こっちの方が 凄い\(^o^)/凄い\(^o^)/ (sin)