Excel で IF を使いすぎるのをやめたところ、数式が即座にクリーンかつ高速になりました。

in tech

長年にわたり、Excel の数式でさらにロジックが必要な場合は、ネストされた IF ステートメントが私のデフォルトのソリューションでした。問題は、驚くほど早く、読み取り、デバッグ、保守が困難になることです。やがて、私は閉じ括弧でいっぱいの数式を見つめ、すべてがどのように組み合わされるかを考え出すようになりました。

ネストされた IF 式は無数のオンライン Excel チュートリアルに登場するため、より優れた代替手段が存在する場合でも、Copilot for Excel などの AI ツールがそれらを推奨することがよくあります。重要なのは、実際に解決しようとしている問題の種類を認識することです。ここでは、その習慣を打破し、よりクリーンで高速なスプレッドシートを構築する方法を紹介します。

IFS: 論理テストの長いチェーンを平坦化する

複数の結果をクリーンに処理する

複数の条件を評価し、それぞれに異なる結果を返す必要がある場合は、Excel の IFS 関数を使用しました。従来の IF 式で必要とされる余分なネストが回避されるため、通常は読みやすく、保守しやすくなります。

シナリオ: 家事を追跡していて、タスクに「未開始」、「進行中」、「完了」、「スキップ」のいずれのマークが付いているかに応じて異なるラベルを表示したいと考えています。

A 列にタスク、B 列にステータス、C 列に優先度レベル、D 列に期限超過日数、E 列に空白のラベル列を含む Excel 表。

ここでわかるように、ロジックの層が追加されると、入れ子になった IF 式が読みにくくなります。

ネストされた IF 数式が Excel 数式バーの複数の行に広がり、4 つの右かっこが表示されます。

複数の条件付きレイヤーをナビゲートする代わりに、IFS を使用できます。

=IFS(
(@Status)="Not Started", "Pending",
(@Status)="In Progress", "Active",
(@Status)="Done", "Complete",
(@Status)="Skipped", "Skipped",
TRUE, "Review"
)
Excel の数式バーの IFS 数式。各行に条件と出力の明確な並列ペアが表示され、最後に包括的な TRUE 評価が表示されます。

プレス Alt+Enter 数式バーで をクリックして、長い数式内に改行を追加します。 Excel による数式の評価方法には影響しませんが、複雑なロジックのスキャン、デバッグ、編集が大幅に容易になります。

主な違いは構造です。ネストされた IF 式では、各条件が前の条件の内側にラップされ、層状の階層が作成され、成長するにつれてスキャンが困難になります。 IFS は入れ子を完全に削除し、各条件を左から右への線形構造として表示します。

SWITCH: 1 つの値を多くの可能性と比較します。

完全一致を効率的にマッピングする

すべての複数結果の式が真の論理問題であるわけではありません。 1 つの値を可能性のリストと照合する必要がある場合、通常は、ネストされた IF ステートメントや IFS よりも SWITCH 関数の方が適しています。

古いスプレッドシートでは、これは多くの場合、数値インデックスが結果にマップされる CHOOSE で処理されていましたが、SWITCH は位置番号ではなく実際の値と一致するため、一般的により明確です。

シナリオ: メディア トラッカーのエントリを「書籍」、「映画」、または「ゲーム」として分類しており、各タイプの表示ラベルを短くしたいと考えています。

A 列にメディア タイトル、B 列に著者、C 列に空白のラベル列が入った Excel テーブル。

IFS を使用する場合でも、ターゲット セル参照を繰り返し入力する必要があります。

Excel の数式バーの IFS 数式。ユーザーは評価対象のセルへの参照を繰り返す必要があります。

SWITCH は、最初にターゲット セルを 1 回宣言することでこの問題を解決します。

=SWITCH(
(@Type),
"Book", "B",
"Movie", "M",
"Game", "G",
"Unknown"
)
Excel でさまざまなメディアの種類を最初の文字で分類するために使用される SWITCH。

ターゲット値 ((@Type)) は最初に 1 回定義されるため、ターゲット値が繰り返し参照されることはなく、式はコンパクトなままとなり、カテゴリが追加されても拡張が容易になります。

OS

Windows、macOS、iPhone、iPad、Android

無料トライアル

1ヶ月

Microsoft 365 には、最大 5 台のデバイスで Word、Excel、PowerPoint などの Office アプリ、1 TB の OneDrive ストレージなどへのアクセスが含まれています。


XLOOKUP: 変更情報を別のリストに保存します

ルックアップロジックを数式から除外する

ある値を別の値に変換することを主な目的として数式が存在する場合、通常は論理の問題ではなく検索の問題を扱っていることになります。私が IF を多用していた主な理由の 1 つは、検索とエラー処理を論理テストに変えようとしていたためです。

シナリオ: あなたはホリデー ギフトの予算スプレッドシートを管理していて、Excel でその人の年齢層に基づいて支出制限を自動的に設定したいと考えています。

A 列に名前、B 列に年齢グループ、C 列に空白の[制限]列がある Excel テーブル。

IF ベースのアプローチでは、新しい年齢グループごとに別の条件が追加されるため、式を維持するのがますます困難になります。

Excel 数式バーの入れ子になった IF 数式は、単純な検索タスクの複雑すぎるロジックを示しています。

これらのルールを IF チェーン内でエンコードする代わりに、XLOOKUP が直接検索できるテーブルにルールを移動します。

=XLOOKUP(
(@AgeGroup),
BudgetTable(AgeGroup),
BudgetTable(Limit)
)

カテゴリと支出制限は、数式自体内ではなくテーブル内に存在するようになりました。そのため、後で支出制限が変更された場合は、参照テーブルを更新するだけで済みます。

XLOOKUP の利点の 1 つは、欠損値のサポートが組み込まれていることです。 IFERROR や IFNA などの個別のエラー処理関数に依存するのではなく、オプションの 4 番目の引数を使用して一致が見つからなかった場合に何が起こるかを定義できます。

ヘルパー列を使用せずにデータを集計する

多くの人は、後で合計を計算するためだけに、IF ステートメントでいっぱいのヘルパー列を作成します。ほとんどの場合、条件付き集計関数のファミリー (SUMIFS、COUNTIFS、および AVERAGEIFS) は、フィルタリングと計算の両方を 1 ステップで処理できます。

シナリオ: あなたは、個人の財務リストから今年食料品にいくら使ったかを知りたいと考えています。

A 列に日付、B 列にカテゴリ、C 列に年、D 列に金額を含む Excel テーブルと、データの抽出に使用される別の領域。

従来は、ヘルパー列を作成し、結果を合計していました。

ただし、専用の集計関数は内部で行をフィルタリングし、1 つのステップで単一の集計結果を返します。

=SUMIFS(
TransactionsTable(Amount),
TransactionsTable(Category), $F$2,
TransactionsTable(Year), $G$2
)
SUMIFS は、カテゴリが「食料品」、年が「2026」であるすべての値の合計を計算するために Excel で使用されます。

値をハードコーディングする代わりにセル F2 と G2 を参照することにより、数式を編集せずに、異なるカテゴリや年を即座に切り替えることができます。

LET: 何かを一度計算して、どこでも参照する

計算を繰り返さずに再利用する

複数の場所で同じ計算を繰り返すと、数式が読みにくくなり、Excel は不必要に作業をやり直すことになります。 LET 関数を使用すると、計算ステップにわかりやすい名前を割り当てて値を保存できるため、同じ計算を 2 回記述する必要がなくなります。

シナリオ: 残業を含む従業員の週給を計算しています。 40時間を超える場合は、通常の1.5倍の賃金が支払われます。

A 列に従業員、B 列に労働時間、C 列に時給、D 列に空白の TotalPay 列が含まれる Excel テーブル。

LET を使用しないと、労働時間、残業時間、給与の同じ計算が 1 つの長い数式内で繰り返されます。これにより、スキャンが困難になり、編集時にエラーが発生する可能性が高くなります。

各従業員の給与率を決定するインライン計算を含む Excel の複雑な IF ステートメント。

LET を使用すると、同じ計算が名前付きコンポーネントに分割されます。

=LET(
Hours, (@HoursWorked),
Rate, (@HourlyRate),
BaseHours, MIN(Hours,40),
OvertimeHours, MAX(0,Hours-40),
BasePay, BaseHours*Rate,
OvertimePay, OvertimeHours*Rate*1.5,
BasePay + OvertimePay
)
基本勤務時間と残業時間を決定するために Excel で使用される LET 関数。これにより、正しい合計給与が各従業員に割り当てられるようになります。

これはより複雑に見えますが、この式は監査が簡単で、しきい値やレートが変更された場合でも後で調整するのがはるかに簡単です。


定型を超えて

ネストされた IF パターンを専用の Excel 関数に置き換え始めると、スプレッドシートの問題の多くがグリッド内で直接解決しやすくなります。しかし、分析前にデータのクリーニングや再形成を繰り返している場合は、ワークシートの数式が完全に膨大になってしまう可能性があります。このような場合、Power Query の条件付き列機能を使用すると、セルに IF ステートメントを記述せずに、繰り返し可能なルールベースの変換を定義できます。結局のところ、適切な Excel アプローチを選択することは、解決しようとしている問題の種類を特定することと同じくらい重要です。

関連情報は以下のリンクからご確認いただけます

公式情報はこちら

関連記事

前の投稿
これらのプライムデーで割引されたモニターアームは、今年最も安価なデスクアップグレードになるかもしれません
次の投稿
次に見るべき「サクセッション」のような番組 10 選