エクセルの「配列」という考え方 | サラリーマン八神かかしの「パソコンおシゴト日記」

エクセルの「配列」という考え方

エクセルには、「配列」という言葉で表現される、ひとつ考え方があるようです。これまでその考え方が良く理解できなかったのですが、最近になってようやく自分でも使えるようになりました。今回は自分の言葉で、この「配列」という考え方を説明してみようと思います。

それから、この「配列」という考え方を使った事例を、いくつか取り上げようと思います。いくら新しいワザや難しいワザを習得しても、それを使う場面をイメージできなければ、意味があるとは言えません。逆に少々難しいワザでも、使うべき場面がはっきり分かっていれば、すぐに使えるようになります。

Sumif関数を別の式で置き換える

Sumif関数は、指定された条件を満たす項目の値だけを合計する関数です。Sumif関数そのものを説明するのが目的ではありませんが、Sumif関数が何をしているかを、先ずはっきりさせておきます。していることの概要を図表にまとめました。ここからリンク しています。

その図解を例にすると、

  1. 列Aの1行目から7行目をひとつひとつ見て、「a」という入力があるかどうかを照合します。
  2. 入力があればの列Bの同一行にある値を、エクセルのシートではない、別のどこかの場所にそれを「仮置き」します。
  3. その入力がなければ、「0」の値を、同じ場所に「仮置き」します。
  4. 列Aの7行目まで全部処理が終わったら、仮置き場所の数値を合計します。

たとえ話も含めると、Sumif関数はこんなことをしているはずです。

要するに、このステップひとつひとつを、Sumif関数を使わずに同じことを実現できればよいのです。

置き換えができた!!

できました。置き換えができました。

先ほどの図解にある例、

=Sumif(A1:A7,"a",B1:B7)

は、次の式に置き換えられます。

{=Sum(If(A1:A7="a",B1:B7,0)}

ここで気が付くことが二つあります。

  1. ひとつは、If関数の中身が普通とは違うこと、
  2. もうひとつは、式全体が{}で括られていること、

です。

普通に見かけるIf関数なら、次のように書きます。

=If(A1="a",B1,0)

何か普通とは違うことが起きているようです。

複数のセルに対して照合・判断、複数の結果を出力している

通常If関数の場合、与えられた条件を満たすかどうかを、単独のセルに対して照合・判断を行い、その結果出力されることはひとつだけです。多分、If関数には、もともとひとつの条件判断に対してひとつだけの結果を出力する機能しか持ち合わせていないのだと思います。

ところが、この場合はそうではありません。どうやら、その手助けをするのが「配列」という考え方のようです。

単独ではできなかったことを、「配列」の手助けにより、If関数は次のことを実行します。

  1. A1:A7を順番に、ひとつひとつ照合。与えられた条件と一致するかを判断。
  2. ひとつひとつの判断結果によって、B1:B7の範囲から対象の値を、または「0」を出力。

これも図解を用意しました。それを見たほうが理解しやすいと思います。

ここからリンク しております。

{}の意味

もうひとつ気がが付いたこと、式が{}で括られていることですが、このカッコをキーボードから入力して「Enter」キーを押しても、実はその方法では式は確定されません。

{}がない状態までを、キーボードやマウスでクリックするなどして入力をして、「Ctrl」+「Shift」+「Enter」で式を確定させます。すると、自動的に{}が付きます。

{}が付いた状態が、配列を使っているという証拠になります。逆に一旦確定させた内容を編集させようとすると、その時点で{}は消えてなくなってしまいます。編集作業が済んだら、再び「Ctrl」+「Shift」+「Enter」で式を確定させます。そうすると再び{}が表示されます。

予告編

次回以降、いくつか配列を使った事例を紹介いたします。どんな事例かだけ、この場でクイズ形式で紹介をしておきます

第一問
特定の条件を満たす行だけを対象にして、その行にある2つの値を掛け算し、かつ掛け算結果を合計できる式を作りなさい。
第二問
一行の中に、正の数値と負の数値が混在して各セルに入力されています。それらを一旦絶対値にしてから合計する式を作りなさい。
第三問
一行おきに合計できる式を作りなさい。

条件がひとつあります。関数はいくつ使っても構いませんが、配列の考え方をそこに盛り込み、最終的には完結するひとつの式として、それをひとつのセルに入力しなければなりません。

最初にも述べましたが、いくら難しいワザを知っていても、それを使う場面がなければ知っている意味があまりありません。Sumifという関数があれば、わざわざ難しいワザを持ち出すまでもなく、Sumif関数を使えばよいことです。

それに対して、次回以降で触れる事例は、「配列」活用すると、余計な計算式を組まなくても済む内容です。