ITライター 立山秀利
1行おきのセルの値を合計したい場合、通常の数式ではなく、「配列数式」と呼ばれる仕組みを使うと、効率的に求めることができる。今回は配列数式の使い方の代表例を紹介する。
例えば図1のように、支店ごとの前期/後期の売上がB2~9セルに入力されているとする。B2、B4、B6、B8が前期、B3、B5、B7、B9が後期となり、前期と後期が1行おきに入力された形式になる。この表から、前期の合計をE1セルに、後期の合計をE2セルにそれぞれ求めたいとする。
図1
もし、各売上データと同じ行で、B列以外の列に「前期」「後期」というデータが入力されている表なら、前期および後期の合計はSUMIFS関数などですぐに求められる。しかし、図1のようにそのようなデータが入力されておらず、単に1行おきに売上が入力されている体裁の表なら、SUMIFS関数などは使えない。
その場合、B2~B9セルで行番号が偶数なら前期、奇数なら後期という方法で合計を求めることになる。行番号が偶数か奇数か、B2~B9セルの行ごとにそれぞれ求めてもよいが、「配列数式」を利用すると、より効率的だ。
配列数式とは、複数のセルをまとめて扱うための仕組みである。先に図1の例で、E1セルに前期の合計を求める数式を紹介しよう。
-----------------------------------
=SUM(IF(ISEVEN(ROW(B2:B9)),B2:B9))
-----------------------------------
少々複雑だが、この数式ひとつで、B2~B9セルに1行おきに入力された前期の売上の合計を求められる。この数式の読み方だが、大きくは「=SUM(条件,B2:B9))」という構造になっている。SUM関数の引数は2つあり、1つ目には条件、2つ目には合計範囲のB2~B9セルを指定している。
条件として指定している数式「IF(ISEVEN(ROW(B2:B9))」の意味は、「もし行番号が偶数なら」だ。「もし」の条件分岐はIF関数、偶数かどうかの判定はISEVEN関数、行番号の取得はROW関数で行う。
配列数式が使われている箇所は、ROW関数「ROW(B2:B9)」の引数「B2:B9」の部分だ。ROW関数の引数は通常、単一のセル番地を指定すると、その行番号が取得できる。しかし、上記数式のようにセル範囲を指定すると、配列数式として扱われ、各セルで行番号を取得し、順番に処理できるようになる。
上記数式をE1セルに入力し、[Enter]キーを押して確定すると、図2のように前期の合計が求められる。
(注)Excelが最新バージョンのOffice 365版ではない場合は、入力確定をする際は「Ctrl + Shift + Enterキー」を行わないと正しい数値が表示されません
図2
E2セルの後期の合計を求める数式は以下のとおりだ。
-----------------------------------
=SUM(IF(ISODD(ROW(B2:B9)),B2:B9))
-----------------------------------
前期の合計を求める数式と異なるのは、ISEVEN関数の代わりにISODD関数を用いている点だけだ。ISODDは奇数かどうかを判定する関数である。
実際に上記数式をE2セルに入力すると、図3のように後期の合計が求められる。
(注)Excelが最新バージョンのOffice 365版ではない場合は、入力確定をする際は「Ctrl + Shift + Enterキー」を行わないと正しい数値が表示されません
図3
また、この配列数式を使った方法は1行おきだけでなく、1列おきに合計を求めることもできる。その際、ROW関数のかわりにCOLUMN関数を用いればよい。指定したセルの列番号を取得する関数だ。なお、列番号はA列を1とする連番として取得される。
このように配列数式を使えば、1行おきのセルの合計を数式1つで求めることができる。
立山秀利(たてやま・ひでとし)
カーナビのソフトウェア開発、Webプロデュース業務を経て、現在は、システムやネットワーク、Microsoft Officeを中心に執筆中。 主な著書に『Excel VBAのプログラミングのツボとコツがゼッタイにわかる本』などがある。
(監修:日経BPコンサルティング)