[書式] 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関数 や計算式の解説を始めると、
どんどん横道に逸れそうですので。
ということで今回は、わたくしの個人的な集計テクニックの一部を紹介いたしました。