- ベストアンサー
エクセル教えてください。周りの人に聞けません。
D1のセルに任意の数値、E1のセルに任意の記号(アルファベット等)を入れて F1に=D1&E1と関数を入れて文字列を作り、データベースを作成しています。現在弊社でダブルカウントが問題となっておりましてG列にダブルカウントの判定式を作りたいのです。F列の中でダブルカウントしていない場合はOK、ダブルカウントした場合はNGと出るようにしたいのですが、関数が組み立てられません。 ご存知の方、是非御教え下さい。宜しく御願い致します。 (例) A B C D E F G 1 1 A 1A OK 2 2 A 2A OK 3 3 A 3A OK 4 1 A 1A NG ・ ・ ・ 100 1 A 1A NG
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
判定を表示する列をG列として、 G1は必ずOK G2~は、 G2 =IF(COUNTIF(F$1:F1,"=" & F2)<>0,"NG","OK") G3 =IF(COUNTIF(F$1:F2,"=" & F3)<>0,"NG","OK") G4 =IF(COUNTIF(F$1:F3,"=" & F4)<>0,"NG","OK") ・・・ --- COUNTIF で判定する前の行までに同じ文字の個数をとって、 0ならないのでOK、0以外なら同じ文字があるので、NG 伝わりますか?
その他の回答 (9)
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.2,7,8,9です。 それから、既に入力されているデータに関しては兎も角、今後、新たにデータを入力する際に、入力規則を使用して、重複データを入力出来なくする事も出来ます。(但し、セル自体のコピー&ペーストに対しては、入力規則で制限する事は出来ません) D列~G列を選択 ↓ Excelのバージョンが、 Excel2007以降の場合は、[データ]タグ、 Excel2007よりも前の場合は、メニューの[データ]ボタン をクリック ↓ Excel2007以降の場合は、「データツール」グループの中にある[データの入力規則]、 Excel2007よりも前の場合は、現れた選択肢の中にある[入力規則] をクリック ↓ 現れた「データの入力規則」ウィンドウの[設定]タグをクリック ↓ 「入力値の種類」欄をクリックし、現れた選択肢の中にある[ユーザー設定]をクリック ↓ 「数式」欄に次の数式を入力 =COUNTIF($F:$F,INDEX($F:$F,ROW()))=1 ↓ 「データの入力規則」ウィンドウの[OK]ボタンをクリック
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.2,7です。 それから、私は使用した事が無いため、詳しくは知りませんが、以下のサイトに、重複したデータを削除したり、重複していないデータのみを抽出する方法が掲載されています。 【参考URL】 http://pc.nikkeibp.co.jp/pc21/tech/excel43/40/ http://office.microsoft.com/ja-jp/excel-help/HP010073943.aspx
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.2,7です。 それから、単にG列にNGと表示させるだけではなく、条件付き書式を使用して、NGの行の色が変わる様にしておかれれば、何処にNGがあるのか判り易くなりますし、新たにデータを入力する際にも、重複したデータを入力してした事が直ぐに判るため、データを入力した段階で、データの入力者自身が、重複データを入力した事に気付いて取り消す事も可能になるかと思います。 その設定方法ですが、ExcelのバージョンがExcel2007よりも前のバージョンと、Excel2007以降のバージョンでは、操作方法が異なります。 【Excel2007よりも前のバージョンの場合】 D1セルを選択 ↓ メニューの[書式]をクリック ↓ 現れた選択肢の中にある[条件付き書式]をクリック ↓ 現れた「条件付き書式の設定」ウィンドウの左端の欄をクリック ↓ 現れた選択肢の中にある「数式が」をクリック ↓ 「条件付き書式の設定」ウィンドウの左から2番目の欄に次の数式を入力 =INDEX($G:$G,ROW())="NG" ↓ 「条件付き書式の設定」ウィンドウの[書式]ボタンをクリック ↓ 現れた「セルの書式設定」ウィンドウの[パターン]タグをクリック ↓ 好きな色の四角形をクリック ↓ 「セルの書式設定」ウィンドウの[OK]ボタンをクリック ↓ 「条件付き書式の設定」ウィンドウの[OK]ボタンをクリック ↓ D1セルにカーソルを合わせて、マウスを右クリック ↓ 現れた選択肢の中にある[コピー]をクリック ↓ D列~G列の、条件付き書式を設定したいセル範囲を、範囲選択 ↓ 選択範囲を示す黒い太枠の内側にカーソルを合わせて、マウスを右クリック ↓ 現れた選択肢の中にある[形式を選択して貼り付け]をクリック ↓ 現れた「形式を選択して貼り付け」ウィンドウの中にある「書式」と記されている箇所をクリックして、チェックを入れる ↓ 「形式を選択して貼り付け」ウィンドウのの[OK]ボタンをクリック 【Excel2007以降のバージョンの場合】 D1セルを選択 ↓ [ホーム]タグをクリック ↓ [条件付き書式] をクリック ↓ 現れた選択肢の中にある[新しいルール] をクリック ↓ 現れた「新しい書式ルール」ウィンドウの[数式を使用して、書式設定するセルを決定] をクリック ↓ 現れた「次の数式を満たす場合に値を書式設定」欄に次の数式を入力 =INDEX($G:$G,ROW())="NG" ↓ 「新しい書式ルール」ウィンドウの[書式]ボタンをクリック ↓ 現れた「セルの書式設定」ウィンドウの[塗りつぶし] タグをクリック ↓ 好きな色の四角形をクリック ↓ 「セルの書式設定」ウィンドウの[OK]ボタンをクリック ↓ 「新しい書式ルール」ウィンドウの[OK]ボタンをクリック ↓ 選択しているセルを変えずに、再度[条件付き書式] をクリック ↓ 現れた選択肢の中にある[ルールの管理] をクリック ↓ 現れた「条件付き書式ルールの管理」ウィンドウの「書式ルールの表示」欄が[現在の選択範囲]となっていることを確認 ↓ 「ルール(表示順で適用)」欄が「数式:=INDEX($...」となっている行の「適用先」欄の内容を =$D:$G に変更する ↓ 「条件付き書式ルールの管理」ウィンドウの[OK]ボタンをクリック 以上です。
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.2です。 それから、御質問の主旨からは少し外れますが、以下の様な方法で、別シート等に、最初にそのデータが現れた行のデータのみを、隙間なく表示した表を、自動的に表示させる事も出来ます。 今仮に、元データが並んでいるシートがSheet1であり、Sheet2に重複無しのデータを並べるものとします。 まず、Sheet1のH1セルに次の関数を入力して下さい。 =IF(INDEX($F:$F,ROW())="","",IF(COUNTIF(INDEX($F:$F,1):INDEX($F:$F,ROW()),INDEX($F:$F,ROW()))=1,ROW(),"")) 次に、Sheet1のH1セルをコピーして、Sheet1のH2以下に貼り付けて下さい。 次に、Sheet2のA1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>COUNT(Sheet1!$H:$H),"",INDEX(Sheet1!D:D,SMALL(Sheet1!$H:$H,ROWS($1:1)))) 次に、Sheet2のA1セルをコピーして、Sheet2のB1セルに貼り付けて下さい。 次に、Sheet2のA1~B1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 これで、Sheet2に重複無しのデータが、途中に隙間などない形で表示されます。 尚、最初にそのデータが現れた行のデータではなく、最後ににそのデータが現れた行のデータを表示させる場合には、Sheet1のH1セルに入力する関数を次の様なものとして下さい。(その他の列の関数は変更しません) =IF(INDEX($F:$F,ROW())="","",IF(COUNTIF(INDEX($F:$F,1):INDEX($F:$F,ROW()),INDEX($F:$F,ROW()))=COUNTIF($F:$F,INDEX($F:$F,ROW())),ROW(),""))
- mekuriya
- ベストアンサー率27% (1118/4052)
既に答えは出ていますが、IF関数とISNA関数とVLOOKUP関数の組み合わせでも実現できます。 チェックしたいセルの値が表にあるかどうかを検査して、表に無い(N.A)なら"OK"と表示し、表にあるなら"NG"と表示します。 例えば、「=IF(ISNA(VLOOKUP(F6;F$1:$G5;2;0));"OK";"NG")」となるわけです。どれも利用頻度が高い関数なので是非とも使いこなしてもらいたい関数です。特にVLOOKUP関数は使い勝手が良いです。 ただしこの構文は、 OpenOfficeの関数なのでEXCELとは若干構文が異なるかも知れません。
- pluto1991
- ベストアンサー率30% (2018/6682)
=IF(COUNTIF(F:F,F:F)>1,"NG","OK") 一つ前提条件として欠けている問題があり、例えば、1行目に 1Aが出現した時点で 1AはOKですよね。 でも、後日 4行目に また1Aが出た時点で、 1行目のOKが NGに変わってしまうのです。 それはいいのですか?
- aokii
- ベストアンサー率23% (5210/22062)
以下の式でいかがでしょうか。 =IF(COUNTIF(F$1:F1,F1)>1,"NG","OK")
- kagakusuki
- ベストアンサー率51% (2610/5101)
G1セルに入力する関数は、次の様なものにすれば良いと思います。 =IF(INDEX($F:$F,ROW())="","",IF(COUNTIF(INDEX($F:$F,1):INDEX($F:$F,ROW()),INDEX($F:$F,ROW()))=1,"OK","NG")) 下記の関数 =IF(F1="","",IF(COUNTIF(F$1:F1,F1)=1,"OK","NG")) でも可能ですが、上記の様に参照先を指定する際に、INDEX関数とROW()を組み合わせた方が、セルを削除した際に、関数が入力されている行と、参照先の行がずれてしまう心配が無くなります。(列方向には、ずれますから、セルを削除する場合には、「上方向にシフト」して下さい) 又、同じ理由から、F1セルに入力する関数も、 =INDEX($D:$D,ROW())&INDEX($E:$E,ROW()) とした方が便利です。