エクセル関数で重複チェック方法は?

このQ&Aのポイント
  • エクセル2010でワークシートの指定範囲内に重複する数値があるかどうかをチェックする方法を教えてください。
  • ワークシートの指定範囲内で重複する数値をチェックするためのエクセル関数の使い方について教えてください。
  • エクセル2010で指定範囲内の重複する数値をチェックする方法についての質問です。より簡単な方法があれば教えてください。
回答を見る
  • ベストアンサー

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

エクセル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

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

  • ベストアンサー
回答No.2

色々ありますが、 =SUMPRODUCT((B10:B17>1)*(COUNTIF(B10:B17,B10:B17)>1))=0 こんな感じが標準的と思いますし、再計算処理も割と軽めです。 値が1である場合は一切無視する方向で、 「1より大きい」且つ「重複が有る」場合の件数を加算して、 0であればTRUEを返します。 尚、参照先に空白セルが含まれていても、結果に影響しませんので、 "B10:B17"はもっとルーズな指定が可能です。 ただ、行数が膨大な場合はまた違う方法を検討することもあるのかも知れません。 以上です。

emaxemax
質問者

お礼

ありがとうございます。 これでばっちりOKです。 式もわかりやすく助かりました。

その他の回答 (3)

回答No.4

#2です。 回答する前から気になってはいたのですが、 もし、B10:B17がすべて1だった場合は、 "1は何個あろうが重複に含めません"ということですから TRUEを返すってことでいいですよね? それとも他の値(エラー値とか)の方が良かったりとか? そもそも「すべて1」なんてことはあり得ないとか? 一応確かめておけばよかったかな、と。

emaxemax
質問者

お礼

わざわざご確認ありがとうございます。 全部1もありえます。 その場合はTRUEで大丈夫です。

emaxemax
質問者

補足

くわしく書きますと、デフォルトではB10:B17がすべて1なのです。 そして各セルは、ワークシート上に配置したフォームの8つのDropdownのLink先になっています。 各Dropdownは同一のリストを参照しています。リストから8つまで選択可能にしているということです。 ですから、異なったDropdownから同じ項目が選ばれてないかどうかのチェックのためにこの関数を使わせていただこうと思っています。

  • Chiquilin
  • ベストアンサー率30% (94/305)
回答No.3

> これでTRUEなら重複はないと思いますが その式だと「重複する/しない数」以外が全部「1」だった時 上手く計算しない と思いますけど。 =MAX(FREQUENCY(IF(B10:B17<>1,B10:B17),B10:B17))=1 Ctrl + Shift + Enterで確定

emaxemax
質問者

お礼

CSE関数はよくわからないのですが、ご教示の式で正しく表示されました。 ありがとうございます。

emaxemax
質問者

補足

> 「重複する/しない数」以外が全部「1」だった時 上手く計算しない と思いますけど。 確かにときどき正しくない答えを返すようです。 エクセル特有の小数点以下の誤差のせいではないかと想像し以下のようにROUNDしたところ正しく答えを返してくれました。そういことですよね? =COUNTIF(B10:B17,">1")-(ROUND(SUMPRODUCT(1/COUNTIF(B10:B17,B10:B17)),0)-(COUNTIF(B10:B17,"=1")>0))=0

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

数値の数(8個)=数値の種類数+1の個数-1  ↓ 数値の種類数+1の個数=9  ↓ =(SUMPRODUCT(1/COUNTIF(B10:B17,B10:B17))+COUNTIF(B10:B17,1))<>9

emaxemax
質問者

お礼

さっそくありがとうございます。 重複しない場合に TRUEを返すためには、<>9じゃなくて =9 ですよね? で、試してみたのですが、B10:B17の範囲に数値の 1 がある場合にはこれでうまくいきました。 しかし、たとえば、数値が 2、3、4、5、6、7、8、9 と入力された場合などは正しくありませんでした。

関連するQ&A

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

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

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

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

  • エクセル/COUNTIF関数で空白以外のセル数取得は?

    エクセル2000のワークシート関数の質問です。 B1~B13には数式が入っており、計算の結果として何らかの文字や数字が表示されたセルと、何も表示されない、つまり=""のセルがあります。 このセル範囲の何かが表示されたセルの個数を取得する関数を探しています。 =COUNTIF(B1:B13,"<>""") としてみましたが全セル数の13が返りました。 やむをえず =ROWS(B1:B13)-COUNTBLANK(B1:B13) とか =SUMPRODUCT((LEN(B1:B13)>0)*1) とか =SUMPRODUCT((B1:B13<>"")*1) として取得しましたが、本来のCOUNTIFでは取得できないのでしょうか?

  • エクセルの条件付きでデータの種類をカウントする関数

    エクセルの条件付きで重複データや空白データをカウントせず、種類数をカウントする関数の書き方を教えてください。 C列の5行目から14行目に「品目」が入力され、D列に「売れた数」が入力されているとします。売れていない場合は「売れた数」は空白。品目等のデータがない行もあります。品目には重複しているものもあります。 ここで、G5セルに「売れた品目の種類数」を表示させる関数をどのように書けばよいか教えてください。 SUMPRODUCTやCOUNTIFまたはMATCH関数を使っていろいろ試してみましたが、うまくいきません。

  • エクセル 関数

    sheet1 エクセルのA列に名前が入力されています。 B列にはその個数が正の数または負の数で記入されています。 小数点を含む数はありません。 尚、A列の名前は同じ名前が何度も入力されていて、その行ごとに 個数は異なっています。 上記の状態でsheet1のB列全体の負の数を0(数値)として 同じB列に表示させるには、 どのような数式をシート内のどの部分にはりつければよいのか教えてください。 ROUNDDOW関数を使っていろいろためしましたが、エラーばかりで質問させていただきました。 よろしくお願いします。

  • エクセルで重複のチェック。

    今、A、B列に、数値が入っています。このA,Bの両方の数値の中で、重複している数値そのものと、その数をしりたいのですが、どのように設定すればいいのでしょうか?よろしくおねがいいたします。

  • Excelの関数がわかりません

    ExcelでSubtotalによって抽出されたデータを、Sumproduct関数で種類の数をカウントする方法がわかりません。 それぞれ、=subtotal(3,範囲) =SUMPRODUCT(1/COUNTIF(範囲,範囲)) までは、出来上がっておりますが、上記を組み合わせると数式エラーが発生します。 どのように組み合わせればよいか、または、全く違う方法があるのか是非お教えいただきたいと思います。

  • エクセル 関数について

    入力データ A1~A10に数値10 B1~B20に数値20 C1~C10に数値30が入力されています 質問 A1~C10の範囲内から、E1に数値 0~10の個数、E2に数値11~20の個数、E3に数値21~30の個数、 E4に数値10~30以外の個数を関数を使って計算させるには、どのようにしたらよいのでしょうか? 現在 COUNT、COUNTIF、FREQUENCYを使ってみたのですが、、、うまくいきませんでした。 何か良い アドバイスを下さい 宜しくお願い致します

  • 関数の質問です。

    関数の質問です。 固定の文字列を含む文字と空白のセルを除いた文字列の個数を数えたいのですが 固定の文字を数える場合はCOUNTIF(範囲,"文字列")でできますが この数式の含まない個数を数えたいのですが・・・・ 宜しくお願いいたします。

  • SUMPRODUCT関数で0(ゼロ)と

    はじめまして。arumikan091と申します。 (Excel初心者です(^^;) ExcelのSUMPRODUCT関数について質問があります。 A B (1) 2 0 (2) 2 4 (3) 2 (空白) (4) 2 3 (5) 2 0 (6) 3 4 (7) 3 (空白) というシートの中で、 "A列が2で、かつB列が0の個数を数える" ということをしようと思い =SUMPRODUCT((A1:A7=2)*(B1:B7=0)) と入力したのですが、 これだとB列の0(ゼロ)と一緒に""(空白)も 数えられてしまうようです。 (上記シートだと式の期待値は2なのですが、 実際値は3が返ってきます) このような場合、0(ゼロ)だけを数えられる ようにするにはどのようにすればいいか 教えていただけたら幸いです。 一応、自分でも少ない知識の中で色々トライしてみて、 =SUMPRODUCT((A1:A7=2)*(B1:B7=0))-SUMPRODUCT((A1:A7=2)*(B1:B7="")) のように式を入力するとちゃんと0(ゼロ)だけを 数えてくれるようなのですが、さらに簡単な 方法がありましたら教えてください。 Windows ME、Excel2000です。 ※1 B列単独で =COUNTIF(B1:B7,0)とするとちゃんと 0(ゼロ)だけを数えてくれます。 ※2 一応既存のQ/A集で同じ質問がないか探しましたが、 (「SUMPRODUCT 空白セル」のANDで) 同様、類似の質問が既にありましたら 申し訳ありません。 長文失礼しました(m_ _m

専門家に質問してみよう