• ベストアンサー

エクセル関数で重複チェック(条件付)

表A1:B100で、 A列には1~100の数値が必ず入ります。(空白なし) B列には数値が入っているところと何も入力されていないところがあります。 B列に0以上の数値があり、A列が1でないものだけを対象として、A列の数値が重複していないかどうかをチェックするワークシート関数の組み合わせ方法をご教示ください。(VBAではありません) B列に0以上の数値があり、A列が1でないものだけのA列の数値を抜き出す作業列と、抜き出された数値をCOUNTIFで重複を調べる作業列の計2つの作業列を加えればわたしにもできたのですが、もっといい方法があるのではないかと思い質問いたしました。 よろしくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.8

Excel 標準の関数を幾つも組み合わせるぐらいなら、VBA でユーザー定義関数 を作ってしまうタチなので、関数の組み合わせを考えるのはどうも苦手です。 VBA による解決をオススメしたいところですが、関数のみとなると、いろいろ 考えてみましたが、どうやら私には手に負えないようです。(;-д- ) 日が経ってしまいましたので、他に回答がつかないようですし、改めて Excel 専門の他掲示板で質問してみてはどうでしょうか? マルチポストにならぬよう気をつけて下さいね。Moug 辺りが良いと思います。 お力になれず、すみません。

merlionXX
質問者

お礼

「すみません。」だなんてとんでもない! 大変おせわになり、ありがとうございました。

その他の回答 (7)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.7

> わたしが書いたSUMPRODUCTも、B列が空白のA列に重複があった場合でも > COUNTIF($A$1:$A$100,A1)>1で拾ってしまいました。 うーーん、、気のせいでは? Excel2002 でテストしてみたら大丈夫でしたよ。 > =IF(SUMPRODUCT((A1:A100>1)*(B1:B100>=0)*(B1:B100<>"")*(COUNTIF(A1:A100,A1:A100)>1)*1)>1,"重複","") 結果についてイメージしているものに食い違いがあるかもしれないので、何件 かサンプルデータ(うまくいかないデータ含む)と、どのような結果になれば 良いのかを示して下さい。

merlionXX
質問者

お礼

ありがとうございます。 補足いたします。

merlionXX
質問者

補足

A列 B列 2  10 3  10 4  20 1 1 2 3 1 1 1 上記のようなAB列10行だけのサンプルです。 =IF(SUMPRODUCT((A1:A10>1)*(B1:B10>=0)*(B1:B10<>"")*(COUNTIF(A1:A10,A1:A10)>1)*1)>0,"重複","") で重複とでてしまいます。 A列ではたしかに2と3が重複していますが、6行目と7行目の2.3はB列が空白なのでカウントしたくないのです。

noname#37676
noname#37676
回答No.6

度々ですが、#1のroadhです。 #1のお礼で >作業列1つでチェックできました。 >出来れば作業列をなくしたいのですが・・・・。 とのことでした。 その他の方の回答でも、「作業列を作成する」ことが前提になっていると思います。 判定をするには判定列(作業列)が必要になると思うのですが??? そこで、数式はどのセル(行/列)に置きたいのか?どのような形の結果が欲しいのか?確認したいと思いまして。。。

merlionXX
質問者

お礼

ありがとうございます。 > 数式はどのセル(行/列)に置きたいのか?どのような形の結果が欲しいのか?確認したいと思いまして。。。 判定の数式はどこでもいいですが一つのセルだけで行ないたいのです。 サンプルをNO7の補足に記入しました。

noname#37676
noname#37676
回答No.5

こんにちは。#1です。 #3サンの回答で「目的を達しました」とのことでしたが、問題の解決はできましたか? ゴメンナサイ。私には「>出来れば作業列をなくしたいのですが・・・・。」という完成形が見えませんでした。 ご質問の「>ワークシート関数の組み合わせ」はどこに入れようと考えていたのでしょうか?

merlionXX
質問者

お礼

ありがとうございます。 一旦は、 =IF(SUMPRODUCT((A1:A100>1)*(B1:B100>=0)*(B1:B100<>"")*(COUNTIF(A1:A100,A1:A100)>1)*1)>1,"重複","") で目的を達したと思ったのですが、勘違いでした。 出来れば、この式のように一個のセルで判定したかったのです。 現在は、作業列2つで判定しています。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.4

チェックだけでいいならA:B列を選択して「書式」「条件付き書式」で 「数式が」「=AND($B1>0,COUNTIF($A:$A,$A1)>1)」で書式を押し、パターンを変更する。 ※上記はA1又はB1の条件になります。 これで条件に該当する行の塗りつぶしが変更されます。

merlionXX
質問者

お礼

計算上で使用しますので塗りつぶしではダメなんです。 なお、ご教示の式もB列が空白のA列に重複があっても、B列に数値のあるA列でそれを拾ってしまいます。(1ではなくなってしまいます) やはり、作業列2つ必要なのでしょうか。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

訂正します。 > B列に0以上... =(A1<>1)*(B1>=0)*IF(COUNTIF($A$1:$A$100,A1)>1,1,0)

merlionXX
質問者

お礼

ありがとうございます。 =IF(SUMPRODUCT((A1:A100>1)*(B1:B100>=0)*(B1:B100<>"")*(COUNTIF(A1:A100,A1:A100)>1)*1)>1,"重複","") で目的を達しました。

merlionXX
質問者

補足

解決したつもりが・・・。 だめでした。 ご教示の方法も、わたしが書いたSUMPRODUCTも、B列が空白のA列に重複があった場合でもCOUNTIF($A$1:$A$100,A1)>1で拾ってしまいました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。 これで結果が 1 となったのが該当かな...? =(A1<>1)*(B1>0)*IF(COUNTIF($A$1:$A$100,A1)>1,1,0)

merlionXX
質問者

お礼

ありがとうございました。 でも、 =(A1<>1)*(B1>0)で2行目以下を判定できるのですか?

merlionXX
質問者

補足

あ、すみません。勘違いしました。 これは作業列方式ですね?

noname#37676
noname#37676
回答No.1

こんにちは。 こんなカンジですか? IF関数内にANDを組み合わせました。 =IF((AND(A1>1,B1>0,COUNTIF(A$1:A$100,A1)=1)),A1,"") これをフィルコピーしてください。

merlionXX
質問者

お礼

さっそくありがとうございました。 =IF((AND(A1>1,B1>0,COUNTIF(A$1:A$100,A1)>1)),"重複","") とすることで、作業列1つでチェックできました。 出来れば作業列をなくしたいのですが・・・・。

関連するQ&A

  • エクセル関数で重複チェック

    エクセル2010です。 ワークシートのB10:B17の範囲に数値(1から200くらいの自然数)が入力されます。 この範囲が空白になることはありません。 この範囲内での重複(同じ数値の入力)をチェックしたいのです。 ただし、1は何個あろうが重複に含めません。 となりの列あたりを作業列にして、COUNTIFでもできますが、1個のセルで完結させたいと思います。 まず、1を超える数値の個数を取得し、そこから1を除く数の種類の数を引いて0になれば重複はないのではないかと思い、下記の数式を書いてみました。これでTRUEなら重複はないと思いますが、もっと簡単な方法があるのではないかと質問いたしました。 よろしく願いします。 =COUNTIF(B10:B17,">1")-(SUMPRODUCT(1/COUNTIF(B10:B17,B10:B17))-(COUNTIF(B10:B17,"=1")>0))=0

  • エクセルのCOUNTIF関数について

    エクセルのCOUNTIF関数について、というかCOUNTIF関数でよいのかどうかもよく分からないのですが、教えて下さい。 (1)まず、ワークシートのA列の1~100行目までの100マスを範囲として、数値を入力していくときに、仮に同じ数値を入力しようとしても、入力ができないようにしたいのです。 (2)次に、ワークシートのA列とC列のそれぞれ1~100行目までの合計200マスを範囲として、(1)と同じことをしたいのです。(つまりB列はとばして) (1)と(2)のようなことは可能でしょうか? お分かりの方がおられましたら、ぜひよろしくお願いします!

  • エクセル2000:こんな重複チェックの仕方を教えてください

    下記B列のように関数を入れると、重複していないものが1、しているものが2以上の数値を返します。「1」で、オートフィルタをかけると重複したものを表示しないと思いきや、下の例では山田太郎も当然、表示されません。そこで、山田太郎のうち、一回目の山田太郎は「1」で返すということはできますか?そうするとオートフィルタで正しい重複チェック後の抽出ができると思うのですが・・・。それとももっと簡単な方法はあるのでしょうか?   A       B       B列に入れる計算式       =COUNTIF(A:A,$A1) 山田太郎   2 川村花子   1 山田太郎   2

  • エクセル2000:重複チェックについて

    過去にも同様の質問を探ってみたのですが、差し迫っていることもあり、混乱気味に陥っていて、わかりませんでした。 どうか、教えてください。 ◆ 関数 COUNTIF を使って(?)のチェック方法についての質問です。 「シート1」のA列に漢字の氏名があります。 「シート2」のA列にも漢字の氏名があります。 「シート1」のA列の名前が、「シート2」のA列のどこかに同じ漢字氏名がある場合に「シート1」のB列に「★」を表示したい。 以上です。どうか、よろしくお願いいたします。

  • エクセルのワークシート関数でA、B列不同数取得

    エクセルのワークシートA列とB列にデータがあります。 データは数値、文字列、空白です。エラー値はありません。 A列のセルと同じ行のB列のセルの値が同一でないA列データの個数(またばB列データの個数)を求めるワークシート関数はないでしょうか?(空白同士は同一とみなします。) C列などに作業列を作ってA、Bの比較をして求める方法はすぐに思いつきますが、作業列なしで求めたいのです。

  • エクセルの関数

    エクセルの関数ですが、 シート1の1行目は見出しが入っています。 C2~C267まで、あ店~け店までの9店舗の店名がランダムに入っています。 D2~D267まで、個人名が入っています。 いろんなデータが2行目から各列に入っています。 シート1のデータは日々更新します。 シート2にシート1のデータを反映したいのです。 シート2の1行目は見出し、 シート2のA2は あ店と入っています。A3~A54は空白(シート1に入っている あ店の個人は53人だという事でA3~A54は空白空白なっています。 A55に   い店  A56~A73は空白。 A74に   う店  A75~A93は空白。 A94に   え店 A95~A144は空白。 A145に  お店 A146~A161は空白。 A162に  か店 A163~A179は空白。 A180に  き店 A181~A212は空白。 A213に  く店 A214~A228は空白。 A229に  け店 A230~A254は空白。 シート2の  C列に シート1のM2から入ってる数値 0以下の人の名前をシート2のB2~B54までに データが0以下の人を入れ込みたいのです(よって、もし 0以下の人が10人だったら、B2~B11まで個人名が入って、B12~B54は名前は入らないて事になります) よって、シート2のB2~B54は、シート1の あ店のM列の 0以下の人を反映して表示したいのです 同じ要領で、シート2のD列にシート1のX列の数値の 1以上の人         シート2のE列にシート1のI列の数値の 1以上の人         シート2のF列にシート1の列の数値の 1以上の人 を反映して表示させたいのです このシート1は日々更新します シート2に随時反映するような関数を教えてください 宜しくお願いいたします

  • エクセル 重複データの検索(COUNTIF関数!?)

    A列とB列で、重複しているデータ(数字)を検索するための関数を教えて下さい。 確か、こんなような↓関数だったと思うのですが、ちょっと違うようです。 C2=IF(COUNTIF(A2,B1:B2377),"","×")

  • エクセルの関数でセルの合計を求めたい(条件付) 

    関数で   A B C  1 ○ 1 2 × × 3 ○ 3 4 × × 5 × × 6 ○ 2    ※ ×は空白です。 A行がが○だった時、B列の数字と一つ下の○の行のB列の数字の合計をC行に求めたいと思っています。 例えばC1には4、C3には5と言った感じです。 IF関数をネストしようと思ったのですが、×が10個以上続く場合がありネストできませんでした。 お知恵を拝借させてください。 よろしくお願いします。 関数では難しい場合はVBAでも結構です。

  • Excel検索等関数

    Excelのデータで同じ列の中に番号が重複している値を探し出しなおかつ任意の行数に出す関数はありますか? Sheet1   |Sheet2   A  B |   A  B        1 あ 10 | 1 あ  10 2 あ 11 | 2 あ  11 3 い 21 | 3 い  21 4 う 22 | 4      ←A4:b4は、「い」が2行ないので空白        | 5 う  22        | 6      ←A6:b6も、「う」2行ないので空白 このように、縦の重複したセルを検索して、指定行数内の場合は、空白となる関数式があればお教えください。

  • 条件付で最大値を取得(エクセル2000)

    エクセル2000です。ワークシート関数についての質問です。 セル範囲B1:B5の最大値は、=MAX(B1:B5) で求められますが、これに条件を付加してセル範囲A1:A5が1より大きいもののなかからセル範囲B1:B5の最大値を求めるならどのような数式になるでしょうか? 作業列を設けて、範囲A1:A5が1でないもののみ抽出し、そこからMAXで求めるという方法ならばすぐ思いつくのですが、作業列を使わない方法があればご教示ください。

専門家に質問してみよう