エクセルの操作に慣れてくると、あれ?こんなとき、こんなことができるといいのにな、なんて思うことがあります。
調べてみると、実際にできることもあり、エクセルって、賢いんだなと感心することがあります。
今日は、そんなネタをご紹介します。
Excel2007で説明しますが、それ以前のバージョンでもちゃんとできますよ。
さて、「売上データ」というシートに、次のような表があります。
ある会社の売上情報です。
それでは、この売上データを集計しましょう。
下の表が、集計用です。別シートに用意されているとしましょう。
注意してほしいのは、なぜか?C列~E列の見出しが、元の売上情報の列の並びと違うところです。
(普通、それはないだろうって? まあまあ、そこは、今回のネタの紹介のために大目に見てくださいな。)
皆さんもご存じの通り、商品別の合計値を出すためには、SUMIF関数を用います。
以下のように、3つの引数をきちんと設定すれば、ちゃんと答えが出ます。
ただし、この数式は、縦方向にコピーできますが、横方向にはコピーができません。
列の並びが、異なるからです。
したがって、各列の先頭のセルに手動で関数を設定する必要があります。3回は、関数を設定しなければなりません。
まあ、3回ばかり大したことはありませんが、これがもっとたくさんだったらどうでしょう?
何列にもわたって似たような関数を設定するのは、大変です。
なんとか、楽ができないものでしょうか?
数式をコピーしてすむようにするには、規則性が必要です。
列の並びが異なっていても、ある規則性がどこかにあれば、何とかなります。
たとえば、C列~E列の1行目にある列見出しを活用することはできないでしょうか?
今回のSUMIF関数では、第3引数がまさにその列名で参照できそうです。
これは、名案です。
列見出しを活用するには、セル範囲に名前を付け、その名前と列見出しを同じにしておけばいいのです。
それでは、さっそく、C列に「売上数量」という名前を付けてみましょう。
C列を選択し、「数式」タブの「選択範囲から作成」をクリックします。
「選択範囲から名前を作成」ダイアログボックスが表示されます。
「上端行」にチェックを入れると、1行目の列見出しが名前に設定されます。
「OK」を押します。
同様にD列、E列にも列見出しの名前を付けてください。
一応確認しておきます。
「数式」タブの「名前の管理」をクリックします。
以下のように、3つの名前があれば大丈夫です。
さあ、改めてC2にSUMIF関数を設定しましょう。
注目は、第3引数です。セル範囲の名前を使用するので、C1と、セル番地を使います。
これで良さそうですが、実は、これでは、正しく動作しないのです。
ううん、残念!
実は、C1の値は、「売上数量」という単なる文字列にすぎません。
第3引数に指定すべきは、「売上数量」という、セル範囲につけられた名前なのです。
だから、SUMIF関数に、「売上数量」は、文字列ではなくて、セル範囲なんだよ、と教えてあげなくてはなりません。
なんと、そんな親切な関数があるのです。
それが、INDIRECT関数です。
以下のように、修正してください。
INDIRECT(C$1) とするのです。(数式のコピーのために、複合参照を設定しました)
今度は、ちゃんと答えが出ました。
この数式は、縦方向でも、横方向でも、うまくコピーができます。(複合参照をお忘れなく!)
このように、名前とINDIRECT関数を組み合わせて使用すると、ますます作業を効率的に遂行できるときがあります。
だい