[書式] COUNTIF(<対象範囲>,<条件>)
[機能] <対象範囲> のセルのうち、<条件> に一致するセルの個数をカウントします。
<対象範囲> | カウントしたいセル範囲を指定します。 |
<条件> | 条件を、数値、文字列、式のいずれかで指定します。 |
●●● 実践は、シンプルじゃない ●●●
「実践」というのは、書籍やマニュアルに書かれた知識をふまえつつも、そこから
「少し、はみ出していく」
過程だと、私は思っています。
このはみ出していく過程というのは、同時に
「複雑化」
の過程でもあります。
現実の業務にいざ活用しようとすると、前回の例題のようなシンプルなやり方「だけ」では、十分
に満足のいく結果が得られなかったりするのです。
たとえば、次のようなデータを各問ごとに集計することをイメージしてみましょう。
こんな単純な表でも、配慮しなければならない点がいくつも思い浮かんできます。
(1) データを変更したら、集計結果がリアルタイムに変わってほしい
(2) ブランクをどのような方法で未回答として集計するか
(3) データの行が追加された時、楽にメンテナンスしたい
(4) 集計項目の列が追加された時、楽にメンテナンスしたい
(5) できるだけシンプルにやりたい
(6) 素早く完成させたい
などなど・・・。
こうしたニーズのどこに力点を置くかで、やり方が変わってきます。たとえば、(6)を重視するな
ら、ピボットテーブルが簡単かもしれません。でもそうすると、(1)が実現できません。
ワークシート作りというのは、そんな相反するニーズのバランスを取りつつ、
・安全性
・拡張性
・効率性
の落としどころを探る作業と言ってもいいかもしれません。
ということで、ためしに今回は、私流のやり方で上図のシートを集計してみたいと思います。
やり方の中で、「何でわざわざそんな面倒なことを・・・」と感じることもあるかもしれません。でも
いずれも、(1)~(6)のニーズのいずれかに配慮した、「わたくしなりの落としどころ」です。
なお、ほかにもいろいろな良い方法があるかと思いますので、あくまで一例として参考にしていた
だくのがよいかと思います。
●●● 入力データを、ワンクッション加工する ●●●
私は、入力されたデータをそのまま集計することはしません。たいていの場合、間にシートを1枚
かめて、そこでデータを加工してから集計するようにしています。
たとえば、次のようなやり方です。
(1) 集計したいデータが入力されているブックに、新規シートを作成する。
(2) 新しく作成したシートのシート名を 「集計元データ」 にする。
(3) 「集計元データ」シート の セルA1 に、次の計算式を入力する。
=IF(ISBLANK(入力データ!A1),"未",入力データ!A1)
(4) セルA1 の計算式を セルA1~K21 の範囲にコピーする。
このような空白セルへの対処以外にも、
・数値/文字列の変換
・文字列の置換
・前後に文字列を加える
など、集計対象のデータ状況に応じた加工を、あらかじめここでおこなっておくと便利です。
●●● 集計元の各列に名前をつける ●●●
次に、問1~問6の各列に、名前(範囲名)をつけておきます。
(1) B~K列 を選択する。
(2) メニューから [挿入]-[名前]-[作成] を実行する。
(3) [上端行]のみオンにして、[OK]をクリック。
●●● あっけない集計 ●●●
ここまで準備ができたら、いよいよ集計にかかります。
(1) 新規シートを作成する。
(2) 新しく作成したシートのシート名を 「集計」 にする。
(3) セルB1~B5 に 「問1」~「問5」 の文字列を入力。
(4) セルA2~A7 に 1~5 の数値と、「未」というの文字列を入力。
(5) 「集計」シート の セルB2 に、次の計算式を入力する。
=COUNTIF(INDIRECT(B$1),$A2)
(6) セルB2 の計算式を セルB2~F7 の範囲にコピーする。
これまでの準備のおかげで、ひとつの計算式だけで、問1~問5のすべての集計ができます。
この例題は、やり方と手順の紹介にとどめます。INDIRECT関数 や計算式の解説を始めると、
どんどん横道に逸れそうですので。
ということで今回は、わたくしの個人的な集計テクニックの一部を紹介いたしました。