• ベストアンサー

EXCEL 条件による重複セルの検出

列A   列B   (列C) A2001   0    (*) A2001   0    (*) A2001   1    (*) A2001   1    (*) A2001   2 A2001   2 A2002   0 A2003   1    (*) A2003   1    (*) A2003   3 A2003   3 列A、Bに上記のようなデータが入力されている。 以下の条件でデータを抽出し、列Cに印(上の例では*)を付けたい。 1.列Aが重複しているならば、 2.重複しているデータの中で列Bを比較し、 3.列Bの中で最大の値ではないものに対して*を付ける。 このような処理を行いたいのですが、さっぱり分かりません。 関数でも、VBAでもどちらでもかまいません。 どうぞよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

#横から失礼いたします。  <(_ _)>  「A2002」・「0」の列に印が付いていないところを拝見すると、 =IF(COUNTIF(A:A,A1)=1,"",~~) という処理は不必要かと存じます。  また1列目に見出しが入っていると「$A$1:A$A?」・「$B$1:$B$?」というような指定の仕方ではエラーになりますので、B列の数値が2行目から1000行目ぐらいまで入っているとすると =IF(MAX(($A$2:$A$1000=A2)*$B$2:$B$1000)=B2,"","*") という式をC2に入力し、[Shift] + [Ctrl] + [Enter] で確定します。  1行目から450行目なら「$A$1:A$A450」・「$B$1:$B$450」というような具合です。  このとき、数式バーには、上記の式が { } で囲まれて表示されます(配列数式)。  「配列数式」についてご存じない場合は、説明するとややこしくなりますので、簡単には、 1)[データ(D)] - [並べ替え(S)] で [最優先されるキー] を [列 A] - [昇順(A)] に、[2 番目に優先されるキー] を [列 B] - [降順(N)] にして、[OK] します。 2)C2に =IF(B2=INDEX(B:B,MATCH(A2,A:A,0)),"","*") と入力し、これを最終行までコピーします。  「列Bの中で最大の値」が1個ずつしかない場合は、(2)の式は =IF(A2=A1,"*","") で構いません。  いずれにいたしましても、「*」を付けた後に何らかの処理をされるおつもりでしたら、C列を選択して、一旦、形式を選択して値で貼り付けてからにされた方がよいかと存じます。

nankoro_x
質問者

お礼

非常に丁寧なご説明ありがとうございました。 問題を解決することが出来ました。 誠にありがとうございました。

その他の回答 (1)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

{=IF(COUNTIF(A:A,A1)=1,"",IF(MAX(($A$1:$A$11=A1)*$B$1:$B$11)=B1,"","*"))} 配列計算です こんな感じかな?

nankoro_x
質問者

お礼

配列計算そのものがよく分からなかったので理解できませんでしたが、 ようやく理解できました。 素早いご回答、誠にありがとうございました。