[[20050614105126]] 『データ入力と重複データに警告』(なっち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データ入力と重複データに警告』(なっち)

 こんにちは、お邪魔します。

 いつも、色々な方にご指導・ご教授頂き、とても感謝しております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(F2<G2,IF(SUMPRODUCT(($I$1:$I1=$I2)*($F$1:$F1<F2)*($G$1:$G1>F2)*($G$1:$G1<=G2))+SUMPRODUCT(($I$1:$I1=$I2)*($F$1:$F1>=F2)*($F$1:$F1<G2))>0,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)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.