\r\n\r\n
スクリプトプログラムにおけるIF文の汎用性は誰もが知るところですが、Excelのセル内でも同じようなロジックを使えることをご存知ですか?
プログラムにおけるIF文の基本的な定義は、複数の入力の結果に基づいて特定の何かを出力することができるということです。他の計算の出力を元に、全く別の計算を行うことができます。条件付き書式設定が可能です。入力セルの文字列検索をベースにした出力も可能です。
複雑そうに聞こえるかもしれませんが、心配しないでください。ExcelでIF文を使用するいくつかの創造的な方法を見てみましょう。
ExcelでIF文を使うというと、VBAを思い浮かべる人が多いと思います。これは、IF文が通常プログラミングの世界で使われるロジックだからです。しかし、スプレッドシートのセル自体の内部でも同じプログラミングロジックを使用することができます。
セルに「=IF」()と入力すると、IF文の構文が正しく動作する必要があることがわかる。基本的な要件は、あくまでも「論理テスト」です。デフォルトでは、セルの出力はTRUEまたはFALSEですが、関数に他のパラメータを含めることによって、値をカスタマイズすることができます。
まず、基本的なIF関数について見てみましょう。上記のスプレッドシートの例では、車に関連する4つのイベントを記録しています。オイル交換、車の修理、登録、保証の更新の4つのイベントのうち、どれかが発生した日を記録しています。
Repaired」列が「YES」を含むと仮定すると、イベントタイプは「REPAIR」になると思われます。それ以外の場合は「NOT REPAIRABLE」と表示されるはずです。このIF文のロジックは非常にシンプルです。
=IF(C2="YES","Repair","Non-Repair")この数式を使用して列全体に入力すると、次のような結果が得られます。
これは便利なロジックですが、今回のケースではあまり意味をなしません。誰でも「Fix」欄を見れば、その日付が修正に関連したものであるかどうか判断できる。
そこで、もう少し高度なIF関数文を調べて、このコラムをもう少し便利に使えないか考えてみましょう。
通常のプログラムと同じように、2つ、3つの条件が互いに依存しあっている場合には、AND論理でチェックすることが必要な場合がある。
ここで、新たに「計画的」「非計画的」という2つのタイプのイベントを定義してみよう。
この例では、オイル交換バーだけに着目しています。私はいつもオイル交換の予定を月の2日にしていますが月の2日以外のオイル交換は、予定外のオイル交換となります。
これらを特定するためには、以下のようなandロジックが必要である。
=IF(AND(DAY(A2)=2,B2="YES"),"Planned","Unplanned")その結果は以下の通りです。
これはこれでいいのですが、ご覧の通り、少し論理的な欠陥があります。オイル交換の予定日、つまり「予定」されている日にいつ行われるかを表示するために使用されます。ただし、オイル交換フィールドが空の場合、出力も空になるはずです。このような場合、オイル交換が行われることはないので、結果を返す意味がないのです。
そのために、次のIF関数上級編「ネストされたIF文」のレッスンに進みます。
前の関数を元に、元のIF文にもう一つIF文を追加する必要があります。 元のオイル交換単位が空白の場合、空白を返します。
というフレーズが読み取れます。
=IF(ISBLANK(B2),"",IF(AND(DAY(A2)=2,B2="YES"),"Planned","Unplanned"))さて、この文は少し複雑に見えますが、よく見るとそうではありません。最初のIF文は、B列のセルが空であるかどうかをチェックします。もしそうなら、空白を返すか、または "
もし、空でなければ、最初のIf文のFalseの部分に前節で使ったのと同じIf文**を使うことができます。これにより、実際のオイル交換時にオイル交換日に関する結果を確認し、書き込むだけでよいのです。そうでない場合は、そのセルは空です。
ご想像のとおり、これは非常に複雑なことです。ですから、IF文のネストをするときは、必ず一歩ずつ進んでください。IF文のネストを始める前に、個々のIF文のロジックをテストしてください。というのも、一度入れ子にしてしまうと、トラブルシューティングが本当に悪夢になってしまうからです。
今度は、ロジックをさらに進化させます。今回、私がやりたいことは、オイル交換や整備と同時に登録や保険をする場合は「年間メンテナンス」に戻し、オイル交換だけする場合は「定期メンテナンス」に戻すことだとします。複雑に聞こえるかもしれませんが、正しいIF文のロジックを使うことは、まったく難しくありません。
このロジックでは、ネストされたIF文と一対のOR文の組み合わせが必要である。
=IF(OR(B2="YES",C2="YES"),IF(OR(D2="YES",E2="YES"),"Yearly Maintenance","Routine Maintenance"),"")その結果は以下の通りです。
注目すべきは、ネストされたIF文の中で様々な論理演算子を組み合わせることで、このような複雑な解析を行うことができる点である。
値の範囲をある種のテキスト結果に変換することは、しばしば有用である。これは、華氏0度から50度までを「寒い」、50度から80度までを「暑い」、80度以上を「熱い」と変換するような簡単なものでいいのです。
文字数が端数なので、先生方はこのロジックが一番必要かもしれませんね。次の例では、このような範囲に基づいて値をテキストに変換する方法を探ります。
教師がレターグレードを決定するために以下の範囲を使用することを想定しています。
この複数のネストしたIF文は、以下のような感じです。
=IF(B2>89,"A",IF(B2>79,"B",IF(B2>69,"C",IF(B2>59,"D","F"))))各ネストはシリーズの次の範囲です。ステートメントを正しい数の括弧で終了するように注意する必要があり、そうしないとこの関数は **通常** に動作します。
結果の表は以下の通りです。
このように、任意の数値を説明文字列として表現することができ、ワークシート上の値が変われば自動的に更新もされます。
プログラマーであれば、IF文の威力はすでにご存知でしょう。これにより、あらゆる計算に論理的な分析を自動化することができます。これはスクリプト言語では非常に強力ですが、ご覧の通り、Excelスプレッドシートのセルでも同様に強力です。
Excelでは、IF文のロジックやその他の計算式を使って、ちょっとした工夫で印象的なことができるようになります。
ExcelでIF文を使用するユニークなロジックは何ですか?あなた自身のアイデアやヒントを以下のコメント欄で共有してください。