Frequency関数やアドインのヒストグラムは,セル範囲で対象を決めます。その方法で,各クラスのデータが入っている部分だけを,繰り返し範囲設定してやればいいのですが,もっとスマートな方法を探っています。条件式を組み合わせて,クラスのセルが1組で範囲が0点から5点ならカウント,という方法もあるかもしれませんが,これもあまりスマートに感じません。
もっとスマートな方法をご存じの方がおられましたら,ご教授願えますでしょうか。
下記の様なデータがSheet1にあったとします。
氏名 | クラス | 得点 |
青木 | α | 94 |
伊藤 | β | 68 |
上野 | α | 65 |
この場合、下記の様に入力します(別シートのA1からを前提にしています)。
クラス名 | α | ||
得点範囲 | 頻度 | ||
0 | ~ | =A4-1 | =FREQUENCY(IF(Sheet1!B2:B4=D1,Sheet1!C2:C4,""),C3:C6) |
20 | ~ | =A5-1 | |
40 | ~ | =A6-1 | |
60 | ~ | =A7-1 | |
80 | ~ | 100 |
FREQUENCY関数の所はC3からC7までを選択して入力の上、Ctrl+Shift+Enterしてください。
みそはIF(Sheet1!B2:B4=D1,Sheet1!C2:C4,"")の部分で、配列数式というそうです。
ただ、ANDやOR関数が使えないので、条件が複雑な場合は色々工夫が必要なようです。
また、配列数式の編集方法は特殊なので知らないひとはいじれなくなってしまいます。
詳しくは http://pc.nikkeibp.co.jp/pc21/special/hr/hr1.shtml をご覧ください。
この例では元データのあるシートを直接参照していますが、ここは後々のため、参照範囲に名前を付けておくとよいでしょう。
後はこのシートをコピーし、クラス名を変えればOKです。
おっしゃられている「スマートではない方法」に入るかも知れませんが
こういったやり方もあるので、ご参考までに紹介させて頂きます。
入力データ
A | B | C | |
1 | 氏名 | クラス | 得点 |
2 | あ | 1-1 | 0 |
3 | い | 1-1 | 50 |
4 | う | 1-1 | 74 |
5 | え | 1-2 | 25 |
6 | お | 1-2 | 30 |
7 | か | 1-2 | 35 |
8 | き | 1-2 | 75 |
9 | く | 1-2 | 80 |
10 | け | 1-2 | 85 |
11 | こ | 1-2 | 90 |
度数分布
D | E | F | G | H | |
1 | クラス名 | 得点範囲 | 頻度 | ||
2 | 1-1 | 0 | ~ | 24 | =SUMPRODUCT((A$2:A$11=D13)*(C$2:C$11>=E13)*(C$2:C$11<=G13)) |
3 | 1-1 | 25 | ~ | 49 | |
4 | 1-1 | 50 | ~ | 74 | |
5 | 1-1 | 75 | ~ | 100 | |
6 | 1-2 | 0 | ~ | 24 | |
7 | 1-2 | 25 | ~ | 49 | |
8 | 1-2 | 50 | ~ | 74 | |
9 | 1-2 | 75 | ~ | 100 |
SUMPRODUCT関数を使った書き方になります
IF関数のような真偽結果を用いて、論理積を行う…というのをTransFreeBSDさんが触れられている配列数式で行い、その結果による総和を返します。
ややこしいですが、複雑な条件で判定しているCOUNTIF関数と考えて頂ければ、分かりやすいかと思います。
関数については、下記リンクをご参照下さい
ありがとうございます。
せっかく教えていただいたのですが,試してみたところ,異常な重さでした。何しろ,データが大量なので・・・・・
ありがとうございました。
Frequencyの内側に論理式を入れる,というのは思いつかなかったです。これは大変スマートな方法だと思います。