« 劇場版『ソードアート・オンライン-オーディナル・スケール-』ネタバレじゃないネタバレ | トップページ | 好きにすればいいんじゃないか。 »

Excel で得点幅ごとの人数を数える。

この記事は自分用の覚書です。
(Windows 8.1 Pro 64ビット + Excel2013 Home & Business)

M.K さん
エクセルで、得点の幅ごとに何人いるかを数えるやり方です。
「30点以上40点以下は何名で、41点以上50点以下は何名いて……」とか――いわゆる度数分布というものですね。

COUNTIFS関数を使えばいいかと思います。
(COUNTIFS関数が使えるのはエクセル2007以上)

オートフィルタを使ってもできますが、その場合は「指定の範囲内」を必要な回数だけ実行することになります。ちょっと面倒ですよね。

Shiteinohaninai_2

なもので、COUNTIFS関数を利用することにしました。

なお、Googleなんかで「エクセル 点数 人数」とか探すと、このような場合はFREQUENCY関数を使う説明も見つかります。
FREQUENCY関数でもかまいません。最終的に得られる結果は同じですから。

なぜ、FREQUENCY関数を今回使わないでCOUNTIFS関数を使ったかというと、「FREQUENCY関数のほうが理解しにくく、少し変えたいといった場合に面倒になるだろう」と考えたからです。

詳細を知りたければFREQUENCY関数を検索してみてください――。使い方をすんなり理解できますか。なんだかややこしいと感じませんか。

そんなややこしいと感じるものを仕事では使わないほうがいいと僕は思います。仕事で作るファイルは作った人のものではなく、皆のものです。
たとえば、「エクセルってほとんど初めてです」とかいう人に仕事を引き継ぐことだってあるかもしれません。
たとえ、 M.K さんがFREQUENCY関数を自在に使えるとしても、引き継いだ後の人が困ります。

でも、COUNTIFS関数なら、同じ初めてでも、FREQUENCY関数よりは理解しやすいと思います。
だとしたら、計算結果は同じなのだから、より理解しやすいであろうCOUNTIFS関数を使っておくのが、仕事としては正しいのではないかと思ったしだい。

仕事でのファイル作成では、「自分以外の人がファイルを使う場合もある」ことを考慮してください。
見やすい式を作ったり、理解の助けになるコメントを残したり、やり方はいろいろあるかと思います。

FREQUENCY関数を使ってはいけないといっているのではありません。
もし M.K さんも含めて周囲にいる人たちが「FREQUENCY関数を使っても何も困らない」という人ばかりなら、使うことに何の問題もないと思います。

■例:COUNTIFS関数を使って、得点ごとの人数を数える。

COUNTIFS関数の書式は次のようです。詳細はエクセルのヘルプでCOUNTIFS関数を調べてください。
・COUNTIFS(条件範囲 1, 検索条件 1, [条件範囲 2, 検索条件 2]…)
出典: Excel ヘルプ

「条件範囲」には、人数を数えたい点数の一群を指定します。「検索条件」には >=41 (41以上)などの条件を指定します。

こういう表があるとします。

Countifs0_2
※氏名は「なんちゃって個人情報」のサイトを使って生成

C、D、E列に入っている得点を対象として人数を数えます。
(C、D、E列がそれぞれ「条件範囲」になります。)

得点の幅は、下図のようにG列に入れました。
(実際には計算のなかではG列の値は使っていません。だからなくてもいいのですが、あったほうが見やすいという気がしたので入れました。)

適当なセルに「以上」と「以下」を示す式を入力します。
下図では、H列に「以上」、I列に「以下」を示す式を入れています。
(H列とI列の値が「検索条件」になります。)

「45以下」については、「Aの人数」「Bの人数」「Cの人数」ともにCOUNTIFS関数の検索条件としてI2セルを指定します。
J2セルに、
=COUNTIFS(C$2:C$21,$I$2)
という式を入れて、L2セルまでコピーします。

Countifs1

C2からC21の範囲を対象にして、I2に入れた条件に合致する値の個数を数えます。
I2の条件は  <=45 なので、C2からC21の範囲で「45以下」の値を数えます。

J3セルには、
=COUNTIFS(C$2:C$21,$H3,C$2:C$21,$I3)
という式を入れます。

H3には >=46 が、I3には <=50 が入っているので、C2からC21の範囲で「46以上」かつ「50以下」の値を数えます。

それをJ12セルまでコピーします。
そのあとJ3からJ12を選択して、L列までコピーします。

Countifs2

なお、ここで入力した式について、
=COUNTIFS(C$2:C$21,"<=45")

=COUNTIFS(C$2:C$21,">=46",C$2:C$21,"<=50")
のように、COUNTIFS関数の条件として、点数の幅の下限や上限を示す文字列を入れても計算結果は同じです。
同じですが、このようにしないほうがよいと思います。

なぜかというと、やはり先にふれたように自分以外の人が見ても理解しやすいというのもありますが、それよりも「ちょっと変えたい」となったときにより簡単に修正できるようにしておくためです。

「以下」と「以上」の条件を変える必要が出てきたとき、図のように条件が別のセルに書かれているのと、関数の式のなかに条件が書かれているのとでは、どちらが修正しやすいですか。

たぶん、前者だと思います。
(後者のほうが修正しやすいのでしたら、そうしてください。そういう人はいないと思いますけど……)

こういうセルの使い方を作業列とか作業セルといいます。

FREQUENCY関数を使う説明したサイトでは、一つのセルにFREQUENCY関数で答えを求めれば、見た目がすっきりする――といった説明をしているサイトもあります。
それはそれで間違っていません。

ただ、一つのセルだけで計算の答えを得ようとすると、どうしても数式が長くなって見づらくなり、何をしているのか理解もしづらくなりがちです。理解しづらいということは、ちょっと変えたいときに面倒でもあるということです。

作業列を使って計算の過程を分けておけば、誰もが理解しやすくできますし、「ちょっと変えたい」にも対応しやすくなります。
上図でいえば、下限を「30以下」から初めて「15」ずつ区切っていく――に変えたい場合、H列とI列の式を書き換えるだけで済みます。

    <=30
>=31 <=45
>=46 <=60

というように。

数式のなかに数式を入れる――いわゆる「ネスト」する場合も、各数式を別の別のセルに入れておいて計算結果を参照すると、視認性も高まり、修正も容易になります。
(作業列の利用は、僕も先達から教えてもらった知恵です。作業列を使ったせいで困ったことは一度もありませんが、逆はあります。)

「エクセルのシートで作業列を使うと、列がどんどん増えていってシートが見づらくなるから作業列は使わない」とかいって、作業列を使うことを嫌う人もいますが、僕に言わせればそれはちょっとした勘違いです。

見づらければ、列を非表示にすればいいんです。

とはいえ、ここでも「そうしなければならない」という話ではありません。
職場では「作業列を使わないほうが仕事が円滑に進む」、「作業列を使わなくても数式の理解や修正は誰もが簡単にできる」というのであれば、使う必要はないと思います。

|

« 劇場版『ソードアート・オンライン-オーディナル・スケール-』ネタバレじゃないネタバレ | トップページ | 好きにすればいいんじゃないか。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Excel で得点幅ごとの人数を数える。:

« 劇場版『ソードアート・オンライン-オーディナル・スケール-』ネタバレじゃないネタバレ | トップページ | 好きにすればいいんじゃないか。 »