• ベストアンサー

エクセルの関数でダブルカウントを避ける方法

エクセルの関数機能で回答お願いいたします! _______A_______B_______C_______D_______E_______F 1____品名___値____設定____下限___上限 2_____AA______1______(1)______0______1.6 3_____AB_____1.5_____(2)_____1.4_____2.1 4_____AC______2______(3)_____1.8_____2.2 5_____AD______1______(4)_____2.2_____2.6 6____AE______3____(5)_____2.5_____3.1 このような表があります。   AA~AEまで5つの商品があり、 それぞれに値があります。 それらを 下限(D列)≦ 値 <上限(E列) の範囲に 当てはまる 品数 をカウントしたいのですが これをカウントし、F列に答えを返すと、 (1)0~1.6の間には  3つ (2)1.4~2.1の間には 2つ (3)1.8~2.2の間には 1つ (4)2.2~2.6の間には 0つ (5)2.5~3.1の間には 1つ となり、下限と上限の間にある値をダブッてカウントしてしまうのです。 F列の縦合計が 品名の数と同じようになるように、ダブらずに集計したいのですが ダブらないでカウントする条件を設定したいのです。 たとえば 品名ABの場合、 下限と上限の範囲には 2つヒット(設定(1)と(2))してしまうので この場合、(1)の方にカウントし、(2)にはカウントしない という風にし、絶対にダブルカウントせずに下限と上限の間の設定が2箇所ヒットした場合 常に下限が小さい方にカウントさせる方法はないでしょうか? もしもっとシンプルに以上の解決策を ご存知でしたら是非それも教えてください。 よろしくお願いいたします!!!

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 F2に、 =COUNTIF(B:B,">=" & MAX(D2,$E$1:E1))-COUNTIF(B:B,">=" & E2) と入力して、下の行へコピーします。 質問欄の例だと、F2から順に、 3、1、0、0、1 になります。

cleverclober
質問者

お礼

ありがとうございました! シンプルかつ正確な回答、 そのとおりにやってみたらできました! 例題に出したものは私がやっているものを 簡略化したものだったので さらに手を加えてちゃんと動くかどうかだけが 心配です・・・またできなかったら教えてください。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

ユーザー関数を作って、素直に考えたとおりできないか考えました。 (1)規範となる区分けは、E1:F5に 0 1.6 1.4 2.1 1.8 2.2 2.2 2.6 2.5 3.1 あるものとします。(「値」データと、区分け表部分が 質問では一体化して記述説明されているので、わかり難いかったので、わけました。) (2)区分けは下限の昇順に並んでいるとします。 (3)ある「値」が決まったとき、上記区分けの何番目に 属するかを返すユーザー関数で作りました。(2)のお陰で初めに見つかった、区分けの番号を返せばよい。 このユーザー関数の作り方は、 ツールーマクロ-VBEで出てくる画面で、メニューの挿入-標準モジュールをクリックして出てくる画面に、コピペします。 Function bet(a, b) Dim cl As Range n = 1 For Each cl In b If a > cl And a <= cl.Offset(0, 1) Then bet = n Exit Function Else n = n + 1 End If Next bet = "" End Function (4)ワークシートで、A列に値が入っているとします。 B1セルに=bet(A1,$E$1:$E$5)と入れます。 (本番で区分けが多いと、$E$5の5が変ります。) B2以下に式を複写します。 結果は、下記(結果)のようになります。 (5)別のセル範囲で =COUNTIF(B:B,1) 19 =COUNTIF(B:B,2) 6 =COUNTIF(B:B,3) 1 =COUNTIF(B:B,4) 4 =COUNTIF(B:B,5) 6 (合計36です。) と式を5つのセルに入れると、上記右のような件数になります。 (結果) これはA1:B5の下記5つ(質問例)と 1 1 1.5 1 2 2 1 1 3 5 --- 0.1刻みのA6:B36の 0.1 1 0.2 1 0.3 1 0.4 1 ・・・・(途中略) 2.8 5 2.9 5 3 5 3.1 5 を数えたものです。

cleverclober
質問者

お礼

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

cleverclober
質問者

補足

ありがとうございます。 早速試してみたのですが (4)の B1セルに=bet(A1,$E$1:$E$5)と入れます。 というところでB1セルに上の式を入れると B1~B5までのセルが結合され数式がそのまま表示されて しまいました。 もし良ければ補足でもう少し詳しく教えてもらえませんか?VBAの標準モジュールに貼り付けるだけで後は何もしないのでしょうか?教えてください。

全文を見る
すると、全ての回答が全文表示されます。
  • hakone
  • ベストアンサー率54% (40/73)
回答No.4

勝手に条件を解釈して、 ・上限の列(E列)は必ず昇順に並んでいる。  (2行目が2.2で3行目が2.1というような逆転がない) ・データは必ず(1)~(5)の何処かに入る。 と仮定しました。 で、F2に =COUNTIF(B$2:B$6,"<="&E2)-SUM(F$1:F1) と書いて、下の方にコピーしてみて下さい。 上記の仮定が間違っていたら、答えも間違っています。

cleverclober
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.3

例えば1.4~2.1の間をカウントするときは、 「1.4~2.1の間のカウント数」-「1.4~1.6の間((1)(2)で重複している範囲です)のカウント数」 というような計算式にすればよいと思います。

cleverclober
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

(1)0~1.6 (2)1.4~2.1 (3)1.8~2.2 (4)2.2~2.6 (5)2.5~3.1 上記の設定が (1)0~1.6 (2)1.6~2.1 (3)2.1~2.2 (4)2.2~2.6 (5)2.6~3.1 なら =SUMPRODUCT(($B$2:$B$6>=$D2)*($B$2:$B$6<$E2)) で出来ますが... 上限と下限が重なっている限りは不可能です。

cleverclober
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCEL2010の関数について(カウント方法)

    ある行がブランクで、ある行がブランクで無い行のカウント方法を教えて下さい。 =COUNTIFS(AA11:AB21,"",AC11:AE21,"<>") としたところ#VALUEになってしまいます。(AA-ABとAC-AEはそれぞれ結合されたセルです) そもそも、COUNTIFSでは無理なのでしょうか。 よろしくお願いします。

  • エクセルで同じ値をカウントアップする

    エクセルで特定列の同じ値をカウントアップする方法を教えていただけないでしょうか? 以下のように、A列にはランダムに値が入力されていて、 B列に同じ値の個数をカウントアップしたいと思っています。 A|B --|-- AA|1 AB|1 BD|1 BD|2 AA|2 FG|1 AA|3   

  • エクセルの配列関数の制限について

    エクセルの配列関数の制限について V列にX列・Y列・Z列・AA列・AB列・AC列・AE列・AG列・P列を参照した配列関数を 下のように入力しています。 {=SUM((Y$1:Y$500=F7)*(Z$1:Z$500=H7)*(AA$1:AA$500)*(P7="○"),(AB$1:AB$500=F7) *(AC$1:AC$500=H7)*(AE$1:AE$500=H7)*(AG$1:AG$500)*(P7="×"))} このY列・Z列・AA列・AB列・AC列・AE列・AG列は、ぞれぞれ200行くらいしか 文字が入力されていない場合には、配列関数の結果がうまく表示されました。 これらのセルの200行以降から300行・400行と項目を増やしていったところ、 配列関数の結果がうまく表示されないセルが出てきました。 これは、配列関数の参照するセルに制限があるということでしょうか?

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

    下記のようなことが関数で出来ますか? A1セルに「AA AB AC AD AE」というデータがあったときに、 B1に、A1に「AB」か「AC」という文字列があればそれを取り出す。なければブランク(もしくは#N/A) かつ優先順位もつけたい。 (「AB」も「AC」もある場合は「AB」) 「AA」と「AB」の間など、文字間は必ず半角スペースがあいている状態です。 具体的な例は↓の画像のような感じです。 かなり高度だと思うんですが、関数で実現できますでしょうか? よろしくお願いします。

  • Access@クエリで特殊なカウントについて

    Accessのクエリで次のような場合のカウント方法を教えて下さい。 1AA111 1AA112 1AB111 1AC111 1AC113 1AC114 上記のような列があり、この列から前3文字が同じものをカウントしたいのですがどうすれば良いでしょうか? 結果の例 1AA 2 1AB 1 1AC 3 Likeを使うのだろうと予想はできるのですが、うまくいかないので教えて下さい。 宜しくお願いします。

  • エクセルでカウント関数について

    エクセルでカウント関数を使用したいのですが、範囲がいっぱいありすぎて出来ません。 離れた3箇所の範囲から数字を拾うにはどの関数を使用したら良いのでしょうか? 例えば、A~Zの1~20に1~150の数字があります。このB列1~20とOPQ列の1~20とZ列の1~20の3箇所の範囲から100がいくつあるか拾いたい場合はどうしたら良いのでしょうか? どなたか知ってる方お願い致します。

  • エクセルでのデータの並べ替えについて

    エクセルのデータの並べ変えについてなのですが A列に商品番号がはいっています。 B列にその商品の年代が入っています。 C列には商品内容 D列には詳細 E列には値段 となっているのですが A列にあわせて並べ替えをすることは できるのですが 更にA列で並べかえしたあと それぞれの商品番号の中で今度はB列にあわせて 並べ替えをしたいのです。 つまりこういったかたちです。 AA-AB-01 1998-02 AA-AE-03 1998-05 AA-AA-03 1997-01 AA-AA-05 1995-12 AA-AB-03 1997-01 AA-AB-10 1995-01 であった場合は こうしたいわけです。 AA-AA-05 1995-12 AA-AA-03 1997-01 AA-AB-10 1995-01 AA-AB-03 1997-01 AA-AB-01 1998-02 AA-AE-03 1998-05 としたいわけです。 つまり AA AB AE で区別して その中で年代順にしたいのですが それをそれぞれ手作業でやるのではなく 一括で行う方法がぜひしりたいです。 よろしくお願いします。

  • Excel 条件カウント

    前に類似の質問しましたが、 フラグでなくカウントしたいそうです。 B列   X列   Y列    Z列   AA列  AB列     男性       火曜日  水曜日  木曜日         女性  月曜日  火曜日  水曜日  木曜日  金曜日    男性          男性  月曜日  火曜日  水曜日  木曜日         女性            水曜日  木曜日          ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー C列     X列    Y列   Z列   AA列   AB列    19~22才       火曜日  水曜日  木曜日         51才以上  月曜日  火曜日  水曜日  木曜日  金曜日    41~50才          19~22才  月曜日  火曜日  水曜日  木曜日         31~40才            水曜日  木曜日          ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー アンケート集計の表で男性で「X~AB列のどれかに文字が入っていればカウントX~AB列になにも入っていなければカウントしない」この場合だと2です。女性の場合は2です。 女性、年齢、都道府県など「」内を同じことをする項目が100近くあるので フィルターでは大変です。 下の表は19~22才で「X~AB列のどれかに文字が入っていればカウントX~AB列になにも入っていなければカウントしない」これも2になります。 51才以上は1、41~50才は0、31~40才は1です。 複数回答の項目全てなので。AF~BJ、BK~CLなど ピボット関数マクロ何でもいいので簡単な方法があれば教えてください。 宜しくお願いします。

  • エクセル関数について

    いつもお世話になっています。 エクセル関数についてお聞き致します・ たとえばA列に計測した値が並んでいて、その中の上限と下限(ー10~+10)の規格から外れた数値の個数を数えたい場合に関数を使用したい場合はどの様な関数を使用すればよろしいでしょうか? 宜しくご教授お願い致します。

  • Excel関数で範囲指定し重複以外の値のカウント

    Excelの関数の使い方で教えていただけないかと思い、投稿しました。 お手数ですが、よろしくお願いします。 ある列の中で、限られた値の行を範囲として、別の列の値を調べて、カウントしたいと思っています。 カウントする値は、重複を除いた値の個数をカウントしたいと思います。 例えば、A列の1~100行までの範囲の中で、A列の101行目に入っている値である文字列の”鈴木”と同じ値がある行のB列の値をカウントしたいと思います。 そのB列のカウントを行う場合、重複する値があれば、1とカウントします。 以上の関数をB列の101行目に記載するとすれば、どのような関数になるのか教えていただければ幸いです。よろしくお願いいたします。

専門家に質問してみよう