- OS
-
Windows、macOS、iPhone、iPad、Android
- 無料トライアル
-
1ヶ月
Microsoft 365 には、最大 5 台のデバイスで Word、Excel、PowerPoint などの Office アプリ、1 TB の OneDrive ストレージなどへのアクセスが含まれています。
長年にわたり、Excel の数式でさらにロジックが必要な場合は、ネストされた IF ステートメントが私のデフォルトのソリューションでした。問題は、驚くほど早く、読み取り、デバッグ、保守が困難になることです。やがて、私は閉じ括弧でいっぱいの数式を見つめ、すべてがどのように組み合わされるかを考え出すようになりました。
ネストされた IF 式は無数のオンライン Excel チュートリアルに登場するため、より優れた代替手段が存在する場合でも、Copilot for Excel などの AI ツールがそれらを推奨することがよくあります。重要なのは、実際に解決しようとしている問題の種類を認識することです。ここでは、その習慣を打破し、よりクリーンで高速なスプレッドシートを構築する方法を紹介します。
IFS: 論理テストの長いチェーンを平坦化する
複数の結果をクリーンに処理する
複数の条件を評価し、それぞれに異なる結果を返す必要がある場合は、Excel の IFS 関数を使用しました。従来の IF 式で必要とされる余分なネストが回避されるため、通常は読みやすく、保守しやすくなります。
シナリオ: 家事を追跡していて、タスクに「未開始」、「進行中」、「完了」、「スキップ」のいずれのマークが付いているかに応じて異なるラベルを表示したいと考えています。
ここでわかるように、ロジックの層が追加されると、入れ子になった IF 式が読みにくくなります。
複数の条件付きレイヤーをナビゲートする代わりに、IFS を使用できます。
=IFS(
(@Status)="Not Started", "Pending",
(@Status)="In Progress", "Active",
(@Status)="Done", "Complete",
(@Status)="Skipped", "Skipped",
TRUE, "Review"
)
プレス Alt+Enter 数式バーで をクリックして、長い数式内に改行を追加します。 Excel による数式の評価方法には影響しませんが、複雑なロジックのスキャン、デバッグ、編集が大幅に容易になります。
主な違いは構造です。ネストされた IF 式では、各条件が前の条件の内側にラップされ、層状の階層が作成され、成長するにつれてスキャンが困難になります。 IFS は入れ子を完全に削除し、各条件を左から右への線形構造として表示します。
SWITCH: 1 つの値を多くの可能性と比較します。
完全一致を効率的にマッピングする
すべての複数結果の式が真の論理問題であるわけではありません。 1 つの値を可能性のリストと照合する必要がある場合、通常は、ネストされた IF ステートメントや IFS よりも SWITCH 関数の方が適しています。
古いスプレッドシートでは、これは多くの場合、数値インデックスが結果にマップされる CHOOSE で処理されていましたが、SWITCH は位置番号ではなく実際の値と一致するため、一般的により明確です。
シナリオ: メディア トラッカーのエントリを「書籍」、「映画」、または「ゲーム」として分類しており、各タイプの表示ラベルを短くしたいと考えています。
IFS を使用する場合でも、ターゲット セル参照を繰り返し入力する必要があります。
SWITCH は、最初にターゲット セルを 1 回宣言することでこの問題を解決します。
=SWITCH(
(@Type),
"Book", "B",
"Movie", "M",
"Game", "G",
"Unknown"
)
ターゲット値 ((@Type)) は最初に 1 回定義されるため、ターゲット値が繰り返し参照されることはなく、式はコンパクトなままとなり、カテゴリが追加されても拡張が容易になります。
Windows、macOS、iPhone、iPad、Android
1ヶ月
Microsoft 365 には、最大 5 台のデバイスで Word、Excel、PowerPoint などの Office アプリ、1 TB の OneDrive ストレージなどへのアクセスが含まれています。
XLOOKUP: 変更情報を別のリストに保存します
ルックアップロジックを数式から除外する
ある値を別の値に変換することを主な目的として数式が存在する場合、通常は論理の問題ではなく検索の問題を扱っていることになります。私が IF を多用していた主な理由の 1 つは、検索とエラー処理を論理テストに変えようとしていたためです。
シナリオ: あなたはホリデー ギフトの予算スプレッドシートを管理していて、Excel でその人の年齢層に基づいて支出制限を自動的に設定したいと考えています。
IF ベースのアプローチでは、新しい年齢グループごとに別の条件が追加されるため、式を維持するのがますます困難になります。
これらのルールを IF チェーン内でエンコードする代わりに、XLOOKUP が直接検索できるテーブルにルールを移動します。
=XLOOKUP(
(@AgeGroup),
BudgetTable(AgeGroup),
BudgetTable(Limit)
)
カテゴリと支出制限は、数式自体内ではなくテーブル内に存在するようになりました。そのため、後で支出制限が変更された場合は、参照テーブルを更新するだけで済みます。
XLOOKUP の利点の 1 つは、欠損値のサポートが組み込まれていることです。 IFERROR や IFNA などの個別のエラー処理関数に依存するのではなく、オプションの 4 番目の引数を使用して一致が見つからなかった場合に何が起こるかを定義できます。
ヘルパー列を使用せずにデータを集計する
多くの人は、後で合計を計算するためだけに、IF ステートメントでいっぱいのヘルパー列を作成します。ほとんどの場合、条件付き集計関数のファミリー (SUMIFS、COUNTIFS、および AVERAGEIFS) は、フィルタリングと計算の両方を 1 ステップで処理できます。
シナリオ: あなたは、個人の財務リストから今年食料品にいくら使ったかを知りたいと考えています。
従来は、ヘルパー列を作成し、結果を合計していました。
ただし、専用の集計関数は内部で行をフィルタリングし、1 つのステップで単一の集計結果を返します。
=SUMIFS(
TransactionsTable(Amount),
TransactionsTable(Category), $F$2,
TransactionsTable(Year), $G$2
)
値をハードコーディングする代わりにセル F2 と G2 を参照することにより、数式を編集せずに、異なるカテゴリや年を即座に切り替えることができます。
LET: 何かを一度計算して、どこでも参照する
計算を繰り返さずに再利用する
複数の場所で同じ計算を繰り返すと、数式が読みにくくなり、Excel は不必要に作業をやり直すことになります。 LET 関数を使用すると、計算ステップにわかりやすい名前を割り当てて値を保存できるため、同じ計算を 2 回記述する必要がなくなります。
シナリオ: 残業を含む従業員の週給を計算しています。 40時間を超える場合は、通常の1.5倍の賃金が支払われます。
LET を使用しないと、労働時間、残業時間、給与の同じ計算が 1 つの長い数式内で繰り返されます。これにより、スキャンが困難になり、編集時にエラーが発生する可能性が高くなります。
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
)
これはより複雑に見えますが、この式は監査が簡単で、しきい値やレートが変更された場合でも後で調整するのがはるかに簡単です。
定型を超えて
ネストされた IF パターンを専用の Excel 関数に置き換え始めると、スプレッドシートの問題の多くがグリッド内で直接解決しやすくなります。しかし、分析前にデータのクリーニングや再形成を繰り返している場合は、ワークシートの数式が完全に膨大になってしまう可能性があります。このような場合、Power Query の条件付き列機能を使用すると、セルに IF ステートメントを記述せずに、繰り返し可能なルールベースの変換を定義できます。結局のところ、適切な Excel アプローチを選択することは、解決しようとしている問題の種類を特定することと同じくらい重要です。
関連情報は以下のリンクからご確認いただけます