Chiquilin Site■12.03.09_Excel:飛び飛びの範囲指定の件数計算

その1:FREQUENCYを使う
その2:SUMPRODUCTを使う
その3:合計計算の場合
ChiquilinSite
いくつかに分かれた表1
こういう表で 年齢が30歳未満の人の数を数えようと思ったらどうしましょう。とりあえず表の形が悪いことは考えないものとします。このページを見にきた人は多分 COUNTIF関数で複数範囲を指定しようとして袋小路に迷い込んだんじゃないでしょうか。

その1:FREQUENCYを使う

実のところ COUNTIFで複数範囲指定はできません。看板に偽りアリといわれそうですが タイトルはあくまで検索用です^^; COUNTIFにはまり込むと抜け出せなくなります。範囲を複数指定できる関数は RANKや LARGE/SMALLなど限られています。 COUNTIFでやろうと思ったら 4つの範囲それぞれに式を作って足すことになります。そんな面倒で不格好な方法を使わなくても FREQUENCY関数を使うとすんなり済みます。
■E12セル
=INDEX(FREQUENCY((C$3:C$9,F$3:F$9,I$3:I$9,L$3:L$9),B12:C12),2)
これでおしまい。今回は複数条件だったので INDEX関数を入れましたが 例えば「40歳未満の数」を知りたい場合
■E12セル
=FREQUENCY((C3:C9,F3:F9,I3:I9,L3:L9),39)
だけで求められます。 FREQUENCY関数の結果は必ず配列になりますが 普通に式を確定すると配列の先頭の値が返ります。条件が複数の時は INDEXで配列から必要な区間を指定してもいいのですが 第2引数の区間配列を変えてやれば そのままでも結果を返すことができます。例えば「40歳以上50歳未満」でも
■E12セル
=FREQUENCY((C3:C9,F3:F9,I3:I9,L3:L9),{50,39})
こんなもんです。
ページの一番上へ

その2:SUMPRODUCTを使う

皆大好き SUMPRODUCT。今回の場合も当然使えます。
■E12セル
=SUMPRODUCT((C$3:L$9>=B12)*(C$3:L$9<C12)*(C$2:L$2="年齢")*(C$3:L$9<>""))
横着するならこんな感じです。汎用性は高いですが FREQUENCYと違って 指定する範囲の形が違うと計算できません。また今回の場合 件数計算では空白を省く処理が別途必要です。式を短くするだけなら他にも方法はありますが この手の方法はとりあえずここまでとします。
ページの一番上へ

その3:合計計算の場合

ついでに合計を計算する場合。
 
残念ながら件数計算には便利な FREQUENCY関数も 合計計算には使えません。IF関数を入れて配列計算にすれば別ですが それじゃ使う意味があまりありませんしね。 やっぱり便利な SUMPRODUCT。
■E12セル
=SUMPRODUCT((C$3:K$9>=B12)*(C$3:K$9<C12),D$3:L$9)
今回は「金額」列の右隣の列に何も入っていないのでこれでいいでしょう。 Excel2007の場合 SUMIFSでもいいです。C15セルを「100」などの大きな数値に変更して
■E12セル
=SUMIFS(D$3:L$9,C$3:K$9,"> = "&B12,C$3:K$9,"<"&C12)
やっぱりデータは1列に直してから処理した方が 一般機能ではうまくいきます。
→参考ファイル(050.xls)
ページの一番上へ
ChiquilinSite トップページへ  Copyright(C) Chiquilin_site. All Rights Reserved.
inserted by FC2 system