1 行おきや 1 列おきの合計を出す
Windows 7 の開発秘話 - Windows 7 の情報ならこちら まるごと Windows 7 -
メルマガ登録!
Microsoft At Home マガジン > Microsoft Office > Microsoft Excel > Excel Tips > 1 行おきや 1 列おきの合計を出す
1 行おきや 1 列おきの合計を出す
◆貴方はこんな経験をしたことがありませんか?
Microsoft Office Excel 2007 (以下、エクセル 2007) で合計を出すとき、1 行おきや 1 列おきに加算したいことはありませんか。このような計算には、配列数式という方式を利用します。配列数式を利用すると、通常の関数では実現できない計算を行うことができます。
以下は、エクセル 2007 の表なのですが、この表の「後期」の売上額だけを合計したいと思います。しかし、ご覧のように 1 行おきの合計になるので、通常の SUM 関数を利用する訳にもいきません。かといって、最初のセルが d4 なので = d4+d6+d8+d10+d12+d14+d16 とすればよいのですが、表が大きくなったり、複雑になったりすると対応できません。なんとか、関数を使って計算できないでしょうか?
| |
B |
C |
D |
| 2 |
営業所名 |
期 |
売上額 |
| 3 |
東京本社 |
前期 |
¥3,565,455 |
| 4 |
|
後期 |
¥5,456 |
| 5 |
名古屋支社 |
前期 |
¥5,415,654 |
| 6 |
|
後期 |
¥3,689 |
| 7 |
大阪支社 |
前期 |
¥5,456,544 |
| 8 |
|
後期 |
¥545 |
| 9 |
岡山支社 |
前期 |
¥5,456,545 |
| 10 |
|
後期 |
¥789 |
| 11 |
九州支社 |
前期 |
¥5,456,545 |
| 12 |
|
後期 |
¥2,123 |
| 13 |
沖縄支社 |
前期 |
¥8,789,878 |
| 14 |
|
後期 |
¥212 |
| 15 |
台湾支社 |
前期 |
¥5,456,545 |
| 16 |
|
後期 |
¥2,122 |
◆そのようなときに役立つのは!
そのようなときに役に立つのが、配列数式です。説明は、あとにしてまずは実際にやってみましょう。
- 表を作成します (1-1)。
合計を表示したいセルに「=SUM (IF(C3:C16="後期",D3:D16,0))」と入力します (1-2)。
まず、配列数式とは、作業用セルを使うことなく、複数のデータを一気に計算できる数式であることを理解してください。この場合は (D3:D16) ですから、D3→D4→D5~D16 というように処理します。また、SUM 関数と IF 関数を組み合わせると、以下のような意味になります。
| 【書式】 |
=SUM (IF(引数 1,引数 2,引数 )) |
| 【意味】 |
引数 1 が True の 場合は、引数 2 を加算し、引数 1 が False の場合は、引数 3 を加算する。 |
最初の引数 1 は、C3:C16= "後期" ですから、C3~C16 までのセルの値が "後期" かどうかを判別することになります。最初のセル C3 セルは、"後期" ではありませんので False になり、SUM 関数の 3 番目の引数である 0 が加算されます。次の C4 セルは、"後期" ですから True になり、D4 の値「5456」が加算されます。このように D3 から D16 までを順に演算しながら、加算していけば求める値が出るという訳です。
入力した式にカーソルがあるのを確認して、「Ctrl」+「Shift」+「Enter」で確定すると求める値が表示されます (1-3)。
数式は、確定すると以下のように数式に { } が表示されます。これは配列数式であることを示す記号です。キーボードから { } を直接入力しても無効ですので注意してください。
{=SUM (IF(C3:C16="後期",D3:D16,0))}
なお、もし、「前期 後期 .. 前期 中期 後期 ... 前期 後期」と間に余分なデータが入っていても上記の方法を利用すれば、正しく集計できることも覚えておくとよいでしょう。
応用として以下に「前期 / 後期」などと項目名が入っていない場合の集計方法を挙げます。この場合は、文字列で判別できませんので、行番号を求める ROW 関数を利用します。もし、先に挙げた事例を、行番号で判別して値を加算するのであれば、以下のような式になります。
= SUM (IF(MOD(ROW(D3:D16),2)=0,D3:D16,0))
【解説】
ROW は指定したセルの行番号を返す関数です。MOD は、指定した数で割ったときの余りを求める関数です。最初にセル D3 の行番号 3 を 2 で割ると、余りが 1 になります。これは 0 ではありませんので False になり、SUM 関数の 3 番目の引数である 0 が加算されます。次に、D4 の行数 4 を 2 で割ると、余りが 0 になります。これは True になるので、D4 の値「5456」が加算されます。このようにして加算するセルを判別します。
さらに、以下のような表の得点を加算したいときは、1 列おきに加算することになります。この場合は、COLUMN 関数を以下のように利用してください。
= SUM (IF(MOD(COLUMN(C3:I3),2)=0,C3:I3,0))
次に、1 列ごとに合計する事例を紹介しましょう。以下のような表で「阿部」君の国語から英語までの得点合計を求めてみます。通常の SUM 関数では、欠課の値まで合計してしまいます。
| C |
D |
E |
F |
G |
H |
I |
J |
| |
国語 |
欠課 |
数学 |
欠課 |
英語 |
欠課 |
得点合計 |
| 阿部 |
86 |
1 |
78 |
2 |
100 |
3 |
|
- 表を作成します (1-4)。
H3 セルに「=SUM (IF(MOD(COLUMN(C3:I3),2)=0,C3:I3,0))」と入力します (1-5)。
配列数式の考え方は、前例と同じです。ただ、ROW のかわりに、列数を返す COLUMN 関数を利用しています。
入力した式にカーソルがあるのを確認して、「Ctrl」+「Shift」+「Enter」で確定します (1-6)。
確定すると以下のように数式に { } が表示されます。通常の Enter キーのみでは、配列数式になりませんので注意してください。また、{ } を直接入力しても無効です。
{=SUM (IF(MOD(COLUMN(C3:I3),2)=0,C3:I3,0))}
以上で解説は終了です。
なお、以下に応用例として、C 列が販売金額となっているセルの右にあるセル (D 列) の値だけを合計する事例を挙げます。この事例では、C12 に「メモ」という欄があるため、1 行おきの合計では正しい値を求めることはできません。したがって、判別は MOD を利用しないでセルに入力された項目名を判別して加算していけばよいことになります。
{=SUM (IF(C2:C14="販売金額",D2:D14,0))}