この記事は自分用の覚書です。さん配列数式の件ですが、タイトル通りです。誤解のないように付け加えておくと「我々の業務上では」という話です。「配列数式そのものがだめ」だとか、単に「使ってはいけない」という意味ではありません。我々の業務で配列数式をなぜ使ってはいけないのか。周囲の誰も配列数式について知らないからです。さんだけだと思います。仕事でつくるファイルは、誰のものでもなくて皆のものです。ほかの人に引き継ぐかもしれませんし、「先月つくったのが役立つから、今回使えるよ」というように既存のファイルを流用することだってあるでしょう。そんなときに、誰も知らない配列数式なんてものを使ったファイルを渡されても困ることのほうが多いでしょう。つくった本人が、異動や退職などでいなかったら尋ねることもできません。さんと同等かそれ以上のスキルと知識をもった人が仕事を引き継ぐとは限りません。引き継ぐ人が「関数ってよくわからないので、これから勉強します」というような人かもしれないじゃないですか。仕事でつくるファイルは、できるかぎり誰もが簡単に理解できるようにつくっておくべきです。例外があるとしたら、職場の誰もが、そして今後入社してくる誰もが、配列数式を十分に理解している場合でしょうか。そんな職場だったら、配列数式を使っても何の問題もないと思います。誰もが理解しているのですから。そもそも、我々の業務で「配列数式を使わなければならない具体的な理由」なんてよほどのことがない限り存在しないでしょう。ことは使わなくてもできます。ネットで次のような記事を見つけました。「配列数式」と呼ばれる式を使うと、小計を計算せずに、1つの式で簡単に合計を計算できる。断言できるほど簡単ですか?たぶん理解するのにちょっと苦労すると思います。リンク先の例では、確かに1つの式で答えが得られています。「1つの式で簡単に合計を計算できる」と書いてあるだけのことです。配列数式というものは、誰にでも簡単に理解できるもので、簡単に使えるものだという意味ではありません。Excel2016では面倒ではありません。あっても、一番下のセルまであっという間に式が入力されます。リンク先であげている「1行おきの合計」という例も、配列数式の解説記事なので配列数式を使うように書いているだけです。SUMIF関数を使えばできることです。配列数式とSUMIF関数――どちらが理解しやすいですか?私は、SUMIF関数のほうが理解しやすいです。仕事で同じことをするのならSUMIF関数を使います。使わなければならない具体的な理由が無いものは、仕事では使わないほうがよいということです。作業セル(作業列)は使う。リンク先では「MOD関数を使って行番号の偶数奇数を求めて、それを各行を判別する材料にするやり方」を挙げています。それはそれとして覚えておいて損はないです。MOD関数を知らなくて同じことをしたい場合はどうしたらよいでしょう?各行を区別できるように何らかの印をつけてやって、それを判別材料に使えば、SUMIF関数で対応できます。「何らかの印をつける」ための列を追加してやればいいんです。作業列を使うことを避けないでください。作業列を使って困ることはありませんが、使わないで苦労することはあります。「作業列を使うとどんどん列が増えていって見づらくなるので使わない」と主張する人がいます。「1つのセルのなかで配列数式を使えば、作業セルを使わないで済む」というものもあります。私に言わせれば、そもそも考え方が間違っています。作業セルを使うことと配列数式を使うこと。どちらがより簡単でしょうか。どちらが皆にとって理解しやすいでしょうか。作業列のほうではないですか。簡単にできる(皆が理解しやすい)ほうを採ったほうがよいでしょう。「どんどん列が増えていって見づらい」なら、列を非表示にすればいいだけです。「作業セルを使わないで済むので、(より難しい)配列数式を使う」のではなくて、「(より難しい)配列数式を使うよりは、(より簡単な)作業セルを使う」ほうが、仕事としては正しいと思います。1つのセルで答えを得ることにこだわらないでください。そのことに固執すると1つのセルにやたら長い数式を入れがちです。そんな数式は、関数に不慣れな人には荷が重いです。作業列で、計算の過程をいくつかにわけてやれば、全体として何をしているのかが誰にでも理解しやすくなります。「作業列を使うとどんどん列が増えていって見づらくなるので使わない」と主張する人は、やりたいことができあがった最終形としての表を強くイメージしているのだと思います。作業列を増やすごとに、そのイメージから離れていくので列が増えることを嫌うのでしょう。見た目で列が増えることにどうしても支障があるなら、あるシートで作業列を使った計算をしておいて、最終形としてのレイアウトを作った別のシートから、そのシートを参照してやればいいんです。すれば、計算の過程をわかりやすくしておくことと、必要な列だけが表示されている状態を同時につくれます。英字と数字がハイフォンで区切られていて、数字のところだけを抜き出す例です。(ハイフォン)が、文字列のなかで左から何文字目にあるかわかれば、その1つ右隣から数字を抜き出せます。例では、B列でFIND関数によってハイフォンの位置をまず求めています。足すことで「抜き出し始める位置」を指定しています。いう引数は適当に入れています。「(抜き出し始める位置から)何文字を抜き出すか」の指定ですから、ありえないぐらい多めに指定しておけばいいだけです。LEN関数と組み合わせて元の文字列の字数を抜き出す文字数として使う方法がありますが、「なるべく簡単にする」という方針でやりたかったので図のようにしています。MID関数の数式のなかにFIND関数を入れるのではなく、このように作業列で計算の過程を分けると、全体として何をしているのかが理解しやすいと思います。これでもう「数字のところだけ抜き出せている」ので作業は終わっています。ここからは「得たい見た目を作る」話です。ここでは表の左端に「ID」という作業列を追加しました。各行を区別できるので、別のシートでVLOOKUP関数の引数に使っています。これで最終形として得たいレイアウトになります。作業列が増えていっても、こんなふうに考えれば「得たい見た目」をつくれます。大事なことは、使うべき具体的理由がないのに配列数式をわざわざ使おうと頑張るのではなく、作業列(セル)を使って処理するやり方を頑張って考えてください、ということです。作業列をどう使うかを考えるのに、それなりの時間はかかるでしょう。それでも、ややこしい配列数式を頑張って理解して使うことに時間をかけるよりは、作業列を使うことに時間をかけたほうが、結局は業務全体の効率を上げることにつながると思います。追伸:最後の例は、VLOOKUP関数なんか使わなくても単にセル参照すればいいですね。言いたかったことは「作業列を活用すれば、異なるレイアウトに値を表示できる」ということなんですが、その例としては失敗してます。これでは、「作業列なんて不要」という話になりそうです。説得力のない例ですみません。いえ、作業列の価値と私の失敗は何にも関係がありません。作業列をぜひ活用してください。日付が土日、祝日・休日の場合にセルに色を付ける。»コメント全く同感です。私も仕事柄,配列数式を使うことがありますが,どうしても避けることができないときに限っています。人に渡すことを考えると,やはりわかりやすいのが一番ですから。それと,自分でメンテナンスするときにも,配列数式だと,それを読み解くのに時間がかかります。1つのセルで答えを求める人がもてはやされるようなところがありますが,それをもらって意味が分かって,改良できる人がどれくらいいるのだろうかと思います。エクセルは,印刷する部分・見せる部分と,作業する部分を分けることができるのですから,作業列を使って高度な抽出をした方が,あとのメンテナンスが非常に楽ですね。