これまでの回で、IF・IFERRORなど1つずつの関数の動きを見てきました。今回はその応用編として、関数を重ねて使う「ネスト(入れ子)」について、使い方と内部のしくみを解説します。草野球の成績管理表で、打率を表示する式を例に、初心者向けに丁寧に説明します。
関数のネスト(入れ子)とは
ある関数の結果を、そのまま別の関数の引数として使う書き方のことです。1つの関数だけでは表現しきれない処理を、複数の関数を組み合わせて1つの式にまとめたいときに使います。
基本の考え方はこうです。
=外側の関数(内側の関数(さらに内側の関数(…)))
カッコの中にカッコが入っている形で、電卓で計算するときの「括弧の中を先に計算する」という考え方と同じです。
成績管理表での実例:IFとIFERRORを組み合わせて打率を表示する
大阪グーニーズの個人成績シートで、D列に打数、E列に安打が入っているとします。この2つの列から打率を計算してF列に表示したいのですが、そのまま割り算するだけでは困るケースが2つあります。
| 選手名 | 打数(D列) | 安打(E列) | 打率(F列) |
|---|---|---|---|
| SUZUKI | 5 | 2 | 0.4 |
| NAKATA | 0 | 0 | – |
| YAMAMOTO | (未入力) | (未入力) | – |
NAKATAは「試合には出たが打数0」、YAMAMOTOは「そもそもまだ試合に出ていない(欄が空白)」という違う状態です。どちらも表示上は「-」にしたいのですが、原因が違うため、それぞれに対応した関数を組み合わせる必要があります。この2つの状態を1つの式でまとめて処理するのが、次の式です。
=IF(D2="","-",IFERROR(ROUND(E2/D2,3),"-"))
この式は、外側から見るとIF、その中にIFERROR、さらにその中にROUND、さらにその中に割り算(E2/D2)という、4段階の入れ子になっています。
いきなり完成形を書こうとせず、まずは「=E2/D2」だけを入力し、正しく割り算されるかを確認します。ネストは内側から組み立てるのが安全です。
動作確認できたら、その式をまるごとROUNDのカッコの中に入れます。「=ROUND(E2/D2,3)」とし、桁数がそろうか確認します。
「=IFERROR(ROUND(E2/D2,3),”-“)」とし、打数0の行(0除算)で「-」が表示されるか確認します。
一番外側に「IF(D2=””,”-“, … )」を足して完成です。確定する前に、開いたカッコの数と閉じたカッコの数が一致しているか、必ず数えてからEnterキーを押します。
しくみを理解する:ネストの評価順序
ネストされた式の基本ルールは「内側(奥)にある関数から先に計算し、その結果を外側の関数に渡す」というものです。今回の式でいえば、E2/D2 → ROUND → IFERROR → IFという順で内側から外側へ計算が進みます。
- IFだけは少し特別で、条件(D2=””)の結果が決まった時点で、対応する側の引数だけを計算します。今回の例では、D2が空欄の行はIF自体が「真」と判定した時点で処理が止まり、内側のIFERRORやE2/D2は計算されません
- そのため「未入力(空白)」はIFの段階でせき止められ、「打数0の割り算エラー」はさらに内側まで進んでIFERRORが拾う、という役割分担ができている
よくあるミス:ネスト式でつまずくポイント
ネストが深くなるほど、開き括弧と閉じ括弧の数がどんどん増えていきます。関数を1つ足したら閉じ括弧も1つ増える、と意識しておかないと、最後の1つが足りない・多いといったズレに気づきにくくなります。
「空欄かどうかの判定」はIFの役目、「計算の結果エラーになったときの代替」はIFERRORの役目です。この役割分担を意識せず、どちらか一方だけで両方を済ませようとすると、未入力の行と打数0の行を区別できず、意図しない表示になることがあります。
- ネストとは、ある関数の結果を別の関数の引数として使う書き方
- 評価は基本的に内側から外側へ進むが、IFは条件が決まった枝だけを計算する特別な性質を持つ
- ネストが深くなるほど閉じ括弧の数え間違いが起きやすいので、内側から1つずつ動作を確認しながら組み立てるのが安全
次回予告
次回のテーマは「VLOOKUP関数」です。検索範囲の左端列を探し、そこから右方向に指定した列数だけずらして値を返すしくみを、選手マスタから背番号や守備位置を引く例で解説していきます。
▶︎ 次回:VLOOKUP関数の使い方としくみ



コメント