値じゃなく参照を返す!?Excel関数をコロン( : )で繋ぐ変態的テクニック

実務の深淵

「値」と「参照」の違い、説明できますか?

はじめに、読者の皆様に質問です。
Excelの関数が結果として出力するものには、いくつかの種類があることをご存知でしょうか。

私たちが普段意識しているのは、計算結果である「値(Value:バリュー)」です。
あるいは、複数の値の集まりである「配列(Array:アレイ)」を想像するでしょう。

Excelの説明画像

当ブログでは、日本語と英語はセットで覚えることを強く推奨しています。
VALUE関数やRANDARRAY関数など、関数名にそのまま使われていますからね!

しかし、Excelにはもう一つ、極めて奥深い出力の形が存在します。
それが「参照(Reference:リファレンス)」と呼ばれる概念です。

参照とは、「100」や「あいうえお」といった単なる値そのものではありません。
C2セルやA1:B5といった「セルの場所」を指し示すものです。

Excelの説明画像

一部の関数は、値ではなくこの「参照」を結果として返してくれます。
参照を返すということは、関数と関数をコロンで繋いで、新しい「範囲」を作り出せるのです。

今回は、この「参照を返す関数」たちを徹底的に深掘りしていきます。
Excelのディープな内部構造を理解するための、知的な暇つぶしにご案内しましょう。

この方法は以下の記事でも紹介しています。

本記事では、無料のWeb版Excelを使用して検証を行っています。
Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!


準備:5×5の土台(配列)を作る

関数の詳細な仕様については、Microsoft公式のヘルプも参考にしてください。

まずは、実験のための土台となる配列データを作ります。
A1セルに以下の数式を入力してください。

=SEQUENCE(5, 5)

これで、A1:E5の範囲に1から25までの連番がスピルして表示されましたね。

Excelの説明画像

今回のミッションは、この広大な配列の中から特定の範囲を抜き出すことです。
C2:D5の範囲、すなわち以下の配列を数式で抽出してみせます。

{8, 9; 13, 14; 18, 19; 23, 24}

これから紹介する数式はすべて、B7セルに入力してスピルさせるものとします。

Excelの説明画像

参照を返す関数たち(コロンで繋ぐテクニック)

次に、実際に「参照を返す関数」同士をコロン(:)で繋いでみます。
動的にC2:D5という範囲を作り出す、変態的(褒め言葉)なアプローチです。

ここで重要なのは、コロンは単なる区切りの「記号」ではないということです。

コロンは、2つの参照に挟まれたすべてのセルを結合する「参照演算子」という立派な演算子なのです。

数式1:INDEX関数(動的参照の王様)

=INDEX(A1:E5, 2, 3) : INDEX(A1:E5, 5, 4)

【解説】
INDEX(A1:E5, 2, 3) の部分は、A1:E5の2行目・3列目を指定しています。

表向きは「8」という値(Value)を返しているように見えますよね。

Excelの説明画像

しかし、実は内部的には「C2セル」という参照(Reference)を返しているのです。

同様に、後半の INDEX(A1:E5, 5, 4) は「D5セル」の参照を返します。

Excelの説明画像

これらを参照演算子であるコロンで繋ぐことで、Excelは C2:D5 という範囲参照として認識します。
見事に目的の配列を抽出してくれる、最も実用的な王道の数式です。

Excelの説明画像

数式2:INDIRECT関数(文字列を参照に変換)

B12セルに"C2"、C12セルに"D5"という文字列を入力しておきます。

Excelの説明画像

=INDIRECT(B12) : INDIRECT(C12)

【解説】
INDIRECTは、文字列を本物の参照に変換する関数です。

理屈は数式1と同じで、文字列から参照を作り出しています。

Excelの説明画像

もちろん、実務であれば =INDIRECT(B12 & ":" & C12) と書けば済む話です。

Excelの説明画像

あえてINDIRECTを2つ使ってコロンで繋ぐメリットはほぼありません。

しかし、Excelの内部構造を理解するためには、このような「あえて繋いでみる」という発想が大切です。

数式3:OFFSET関数(基準からシフト)

=OFFSET(A1, 1, 2) : OFFSET(A1, 4, 3)

【解説】
OFFSET関数も、指定した基準セル(A1)から行・列を移動した先の「参照」を返す関数です。

A1から下に1つ、右に2つ移動したC2の参照を返します。

そして、下に4つ、右に3つ移動したD5の参照をコロンで繋いでいます。

Excelの説明画像

数式4:CHOOSE関数(実は参照も選べる)

=CHOOSE(1, C2) : CHOOSE(1, D5)

【解説】
えっ、CHOOSE関数も!?」と驚かれたかもしれません。

CHOOSE関数は値を選ぶだけの関数だと思われがちです。

しかし、引数にセル参照を指定した場合は、しっかりと「参照」を返してくれる奥深い関数なのです。

Excelの説明画像

数式5:XLOOKUP関数(VLOOKUPとの決定的な違い)

=XLOOKUP(6, A1:A5, C1:C5) : XLOOKUP(25, E1:E5, D1:D5)

【解説】
A1:A5(1, 6, 11…)から「6」を探すと、対応するC列のセルはC2になります。

Excelの説明画像

現代の最強関数であるXLOOKUPは、検索結果として「参照」を返す能力を持っています。

Excelの説明画像

ここが古い検索関数との決定的な違いであり、極めて重要なポイントです。

VLOOKUPHLOOKUPLOOKUPの3兄弟は「値」しか返すことができません。
参照を返す能力がないため、これらをコロンで繋ぐことは不可能なのです。

Excelの説明画像

数式6:SWITCH関数(スッキリ条件分岐)

=SWITCH(1, 1, C2) : SWITCH(1, 1, D5)

【解説】
SWITCH関数も参照を返せる優秀な関数です。

Excelの説明画像

ところで、SWITCH関数は使ったことがないという方も多いのではないでしょうか。
SWITCH関数は、1つの対象に対して複数の完全一致条件をスッキリ書ける特徴があります。

1. IFIFSの場合、=IFS(A1="りんご", "赤", A1="バナナ", "黄")のように毎回条件式を書く必要があります。
2. SWITCHの場合、=SWITCH(A1, "りんご", "赤", "バナナ", "黄")のように評価対象を最初に1回書くだけで済みます。

都道府県名から地方名に変換するなど、分岐が多い場面で圧倒的に輝く関数です。

数式7:IF関数とIFS関数(王道も実は対応)

=IF(1, C2:C3, ) : IF(0, , D4:D5)

【解説】
意外に思われるかもしれませんが、IF関数も参照を返せます。

条件がTRUEのときはC2:C3の参照を、FALSEのときはD4:D5の参照を返します。

それをコロンで繋いで、C2:D5という巨大な範囲を形成しています。

Excelの説明画像

ちなみに、複数の条件を扱うIFS関数も同様に参照を返す仕様を持っています。

条件分岐によって参照先を切り替える、変態的な数式を組む際に役立つ知識です。

Excelの説明画像

数式8:LET関数(変数の結果も参照になる)

=LET(a, C2, b, D5, a:b)

または

=LET(a, C2, a) : D5

【解説】
数式を変数に格納してスッキリさせるLET関数ですが、変数に「参照」を格納することも可能です。

当然その結果も「参照」として扱われるため、コロンと組み合わせて使えます。

LETの内部でコロンを使っても良いですし、結果自体を外でコロンと繋ぐことも可能です。

Excelの説明画像

数式9:番外編(交差演算子のロマン)

=(2:2 C:C) : (5:5 D:D)

【解説】
最後は関数ですらありません。

Excelのマニアックな仕様の極みである「交差演算子(スペース)」を使った数式です。

数式の中にある半角スペースは、実は単なる空白ではありません。
2つの範囲が交差(重なる)するセル範囲の参照を返す」という立派な演算子なのです。

  1. (2:2 C:C):2行目とC列が交差する場所、すなわちC2セルの参照を返します。
  2. (5:5 D:D):5行目とD列が交差する場所、すなわちD5セルの参照を返します。
  3. これらを参照演算子であるコロンで繋ぐことで、結果的にC2:D5という範囲が生成されます。
Excelの説明画像

【なぜ現代では一般的ではないのか?】

この交差演算子は、古い時代のExcelにおいて重宝された歴史ある機能です。

縦横の見出しを使った名前付き範囲(例:売上 4月)などで、直感的に交差する値を取得するために用意されました。

しかし現代では、INDEXXLOOKUPといった強力な検索関数が普及しています。

さらに、テーブル機能(構造化参照)やスピルの登場により、このスペース演算子の出番は激減しました。

また、数式内に不用意なスペースが入ることで意図せぬエラーを引き起こす「バグの温床」ともなり得ます。そのため、現代の実務において意図的に使われることはまずありません。

とはいえ、スペース一つが「参照を返す」というこの挙動は、知る人ぞ知るExcelの奥深いロマンと言えるでしょう。


応用:違う関数同士を繋いでもOK!

続いて、ここまでの知識を組み合わせると、さらにマニアックなことが可能になります。

=CHOOSE(1, C2) : SWITCH(1, 1, D5)

同じ関数でなくても、「参照を返す」という性質さえ持っていれば問題ありません。

全く異なる関数同士をコロンで繋いでも、Excelは文句を言わずに処理してくれます。

Excelの説明画像

最後に:これを知っていると実務でどう役立つのか?

最後に、「で、こんな変態的な書き方が実務で何の役に立つの?」という疑問にお答えします。

この「参照を返す」という概念を理解すると、以下のような圧倒的なメリットを享受できます。

1. 揮発性関数からの脱却

データの増減に合わせて範囲を自動で広げたいとき、よくOFFSET関数が使われます。

しかしOFFSETは「揮発性関数」であり、セルを編集するたびに再計算が走り激重になります。

つまり、これをINDEX : INDEXという書き方に置き換えることで、処理を軽く保てます。
揮発性関数を使わずに「動的に変化する範囲(参照)」を作り出せるのです。

2. テーブル機能はもう不要!?関数至上主義の極み

動的に範囲を拡張させたいとき、安易に「テーブル機能」を使っていませんか。

確かに便利ですが、ファイルが重くなったり、意図せぬ書式崩れが起きたりと欠点も多いです。

この動的参照の技術をマスターすれば、わざわざ大げさな「テーブル機能」を使わなくても大丈夫です。

関数だけでスマートかつ軽量に、範囲を自由自在に可変させることができます。

3. Web版Excelにおける最強の武器

実務において、VBA(マクロ)が使えないWeb版Excel環境を強いられるケースが増えています。

マクロが封印された環境で、いかにシステムライクな動的処理を組むかが腕の見せ所です。

関数だけで動的参照を自在に操れるこの技術は、VBAを使えない環境において極めて強力な武器になります。

動的なドロップダウンリストや集計表も、このマニアックな知識があれば思いのままです。


関数は値を出してくれるもの」という思い込みを捨てて、「セルの場所」をコントロールする。

これこそが、標準機能の限界を超え、中級者から上級者へと進化するための鍵です。

ぜひ、色々な関数をコロンで繋いで、Excelの深淵なる世界を堪能してみてください。

タイトルとURLをコピーしました