- Home »
- エクセル関数の技 »
- COUNTIF関数で飛び飛びのセル範囲を指定したい?
- 条件付きでカウントしたいときにはCOUNTIF関数を使うことが多いと思います。ところが対象のセルが飛び飛びであるとちょっと面倒・・・というかCOUNTIFではセル範囲に飛び飛びのセル範囲を指定することができません。
ここではSUMPRODUCT関数を利用して計算をする例を示します。
更新:2024/5/4;作成:2016/4/20
- ここで使用するデータを下表に示します。
コピーしてお使いください。
A,C,E列(奇数列)とB,D,F列(偶数列)に分けて計算を行います。
ここでの課題は○は2点、△は1点と換算して合計を求めるという計算式を作成することです
なお、ここで使っている○は記号の○で漢数字の〇ではなありませんのでご注意ください。
○ |
○ |
△ |
× |
× |
△ |
○ |
○ |
○ |
△ |
△ |
○ |
○ |
○ |
○ |
× |
× |
△ |
△ |
△ |
△ |
△ |
△ |
× |
△ |
△ |
△ |
○ |
× |
△ |
△ |
△ |
○ |
△ |
○ |
× |
△ |
△ |
○ |
× |
× |
△ |
× |
○ |
△ |
× |
× |
△ |
× |
△ |
○ |
△ |
△ |
× |
× |
△ |
× |
× |
× |
△ |
× |
× |
△ |
△ |
△ |
○ |
× |
× |
△ |
○ |
× |
△ |
× |
× |
○ |
△ |
○ |
× |
COUNTIF関数で計算する
- COUNTIF関数でとびとびのセル範囲を計算します。
とてもセンスがあるとは言えないものになってしまいます。
- 奇数列の各セルが○なら*2、△なら1と計算します。
=COUNTIF(A1,"○")*2+COUNTIF(A1,"△")
+COUNTIF(C1,"○")*2+COUNTIF(C1,"△")
+COUNTIF(E1,"○")*2+COUNTIF(E1,"△")
という数式が考えられます。
- 偶数列なら
=COUNTIF(B1,"○")*2+COUNTIF(B1,"△")
+COUNTIF(D1,"○")*2+COUNTIF(D1,"△")
+COUNTIF(F1,"○")*2+COUNTIF(F1,"△")
となります。
- 奇数列の合計だけを求めるなら、
=COUNTIF(A1:A13,"○")*2+COUNTIF(A1:A13,"△")
+COUNTIF(C1:C13,"○")*2+COUNTIF(C1:C13,"△")
+COUNTIF(E1:E13,"○")*2+COUNTIF(E1:E13,"△")
となります。
- 偶数列の合計は
=COUNTIF(B1:B13,"○")*2+COUNTIF(B1:B13,"△")
+COUNTIF(D1:D13,"○")*2+COUNTIF(D1:D13,"△")
+COUNTIF(F1:F13,"○")*2+COUNTIF(F1:F13,"△")
となります。
SUMPRODUCT関数で計算する
- SUMPRODUCT関数を使うとスマートな感じの数式となります。
=(奇数列であるか)*(○*2)*(△*1) といった感じの数式を作成します。
- G1セルの数式
=SUMPRODUCT((MOD(COLUMN(A1:F1),2)=1)
*((A1:F1="○")*2+(A1:F1="△")))
- H1セルの数式
=SUMPRODUCT((MOD(COLUMN(A1:F1),2)=0)
*((A1:F1="○")*2+(A1:F1="△")))
- G14セルの数式
=SUMPRODUCT((MOD(COLUMN(A1:F13),2)=1)
*((A1:F13="○")*2+(A1:F13="△")))
- H14セルの数式
=SUMPRODUCT((MOD(COLUMN(A1:F13),2)=0)
*((A1:F13="○")*2+(A1:F13="△")))
- 1行目で求めたい結果は A,C,E列はそれぞれ○△×なので 2+1+0=3 となり、B,D,F列は○×△なので 2+0+1=3 となります。
2行目のA,C,E列はそれぞれ○○△なので 2+2+1=5 となり、B,D,F列は○△○なので 2+1+2=5 となります。
5行目のA,C,E列はそれぞれ△△×なので 1+1+0=2 となり、B,D,F列は△○△なので 1+2+1=4 となります。
A,C,E列の計算結果はG列に、B,D,F列の計算結果はH列に表示しています。
- 奇数の列、偶数の列を判定する
- 奇数の列を判定するには列番号が2で割って余りが1の時と考えることができます。
数式は MOD(COLUMN(A1:F1),2)=1 となります。
- セルの値が "○" であるか否か?
- (A1:F1)="○" と判定します。
○は2点なので *2 とすれば換算ができます。
数式は ((A1:F1)="○")*2 となります。
- セルの値が "△" であるか否か?
- (A1:F1)="△" と判定します。
△は1点なので *1 としたいところですが、+1と演算をする必要はないので省略ができます。
(Excelが内部で TRUE=1、FALSE=0 と処理するため)
数式は (A1:F1)="△" となります。
- これらをSUMPRODUCT関数で処理をします。
- =SUMPRODUCT((MOD(COLUMN(A1:F1),2)=1)*((A1:F1="○")*2+(A1:F1="△")))
- 偶数列の場合は
=SUMPRODUCT((MOD(COLUMN(A1:F1),2)=0)*((A1:F1="○")*2+(A1:F1="△")))
- 上記の数式がどのような計算過程なのかを検証したいと思います。
- 数式が入力されているセルを選択します。
- [数式]タブのワークシート分析グループの[数式の検証]を実行します。
- 入力されている数式のアンダーラインのついた部分の検証が行われます。
[検証]ボタンをクリックすると、一段階ごとに検証が進みます。
- COLUMN(A1:F1) → {1,2,3,4,5,6} と列番号が配列に入っているのがわかります。
- MOD({1,2,3,4,5,6},2) → {1,0,1,0,1,0} と列番号を2で割った余りが配列に入っています。
- {1,0,1,0,1,0}=1 → {TRUE,FALSE,TRUE,FALSE,TRUE,FALSE} と1と等しい部分はTRUE、そうでない部分はFALSEとなっています。
- (A1:F1="○") → {TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,} とA1からF1を"○"と等しいか否かの結果が配列に入っています。
- {TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,}*2 の部分を検証します。
- {TRUE,TRUE,FALSE,FALSE,FALSE,FALSE}*2 → [2,2,0,0,0,0} と計算されているのがわかります。
TRUE=1、FALSE=0 として演算がされています。TRUE*2=1*2=2 FALSE*2=0*2=0となっています。
- (A1:F1="△") → {FALSE,FALSE,TRUE,FALSE,FALSE,TRUE} とA1からF1を"△"と等しいか否かの結果が配列に入っています。
- {2,2,0,0,0,0}+{FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,} を計算します。
- {2,2,0,0,0,0}+{FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,} → {2,2,1,0,0,1} と計算されました。
各部分の計算は 2+FALSE=2+0=2 2+FALSE=2+0=2 0+TRUE=0+1=1 0+FALSE=0+0=0 0+FALSE=0+0=0 0+TRUE=0+1=1 となっています。
- {TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,}*{2,2,1,0,0,1} の計算の検証を行います。
- {TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,}*{2,2,1,0,0,1} → {2,0,1,0,0,0} となりました。
各部分の計算は TRUE*2=1*2=2 FALSE*0=0*0=0 TRUE*1=1*1=1 FALSE*0=0*0=0 TRUE*0=1*0=0 FALSE*0=0*0=0 となっています。
- SUMPRODUCT({2,0,1,0,0,0}) → 3 と計算されました。配列内が合計されて3となっています。
- 上記の数式を手軽に検証する方法です。数式の一部分の計算状態を簡単に調べることができます。
- 数式バーで数式の一部を選択します。
- [F9]キーを押すと、選択した部分の計算結果が表示されます。
- ほかの部分も同様に選択した後[F9]キーを押すと下図のようになります。
選択した部分の計算状態を確認することができます。
元の数式に戻すには[Esc]キーを押します。
- また、下図のように計算結果を検証することもできます。上記とは選択範囲が異なります。
関連するページ
スポンサードリンク
よねさんのWordとExcelの小部屋 »
エクセル関数の技 » COUNTIF関数で飛び飛びのセル範囲を指定したい?
PageViewCounter
Since2006/2/27