• 締切済み

以下のIF関数について間違いがあればご指摘ください

当方、関数式を学び中ですがIF関数を以下の例を使って組み立てましたが違っているかもしれませんのでご指摘ください。 たとえばA3に、A1かA2いずれかのセルから減算した数を示す場合の関数式を求めることが目的です。 A1セルとA2セルの一方は正数、かつ一方は0となる。 (たとえば「A1」に「100」という数値がある場合はA2は必ず「0」が入力される。同様、「A1」が「0」の場合には「A2」は「100」と入力される条件) 式はIF関数式の構成に合わせ、アバウトに作って試してみたところ一応結果は正常にでました。 それがこの式 =IF(A1<>A2,A3-A1,A3-A2) なのですが、疑問があります。 IF関数の条件に対応させた場合の引数1は「判定条件」であり「A1とA2は等しくない」となるそうなので「A1<>A2」としましたが、「A3-A1」は引数2の「判定が真の場合の処理」、「A3-A2」は引数3「判定が偽の場合の処理」となってしまいますがこれでよいのでしょうか?それとも間違った式の偶然の正しい結果だったのでしょうか。 そこで正しい式と構成についての筋道を教えていただきたく思います。 また「" "」という点を入れる場合はどのようなものに対してでしょうか? これについても教えてください。

みんなの回答

回答No.4

>=A3-A1-A2 >これでも求めている結果がでます。 >内容的には同じだと思いますがこれは関数ではないですよね? そうですね。「関数」ではなく「式」です。 「入力してある値が、限られた条件の状態しか有り得ない」のであれば「条件に一致しない場合に対処する必要が無くなる」「相反する2つの条件が他方に影響を与えない」と言う場合は「関数で書かずに式で済ませる事が出来る」ようになります。 >どのようなでも関数式にできると思いますが、このような場合でも関数にするほうがよいメリットがありましたら教えてください。 関数を使うメリットは「色々な場所で、色々なパラメータを指定して、何度も繰り返して使え、修正は1ヶ所で済む」と言う事です。

noname#231016
noname#231016
回答No.3

>以下のIF関数について間違いがあればご指摘ください >それがこの式 =IF(A1<>A2,A3-A1,A3-A2) なのですが、疑問があります。 数式としてはエラーになりませんが、あなたの目的に合っていないようです。 条件が「A1セルとA2セルの一方は正数、かつ一方は0となる。」ということなので第1引数の論理値は常にTRUEとなり、第2引き数のA3-A1が実行され、第3引数は出番がありません。 A1とA2がランダムに入力されA1=A2の条件になっても計算結果の値は同じになるでしょう。 従って、条件分岐が無駄になっています。 >そこで正しい式と構成についての筋道を教えていただきたく思います。 条件があいまいです。 「たとえばA3に、A1かA2いずれかのセルから減算した数を示す場合の関数式を求めることが目的です。」といってもA3-A1とする条件とA3-A2とする条件を明確にしないと正しい条件分岐を組み立てられません。 一般的な考え方としてはA3からA1またはA2のセルで0以外の値を減ずるという考え方になります。 A1とA2は一方が必ず0で他方が正の値であればIF関数を使う必要はありません。 =A3-SUM(A1:A2) または =A3-MAX(A1:A2) =SUM(A3,-SUM(A1:A2)) =SUM(A3,-MAX(A1:A2)) >また「" "」という点を入れる場合はどのようなものに対してでしょうか? IF関数で条件分岐させるときに結果を空欄にしたいとき使うようです。 =IF(A1>0,IF(A2>0,"",A3-A1),IF(A2>0,A3-A2,"")) A1>0で然もA2>0の時「""」、A1=0で然もA2=0の時「""」のようなときに使うようです。

回答No.2

>A3の値からA1の値を減算した値、または、A3の値からA2の値を減算した値を一つのセルA3に表示させたいということです。 Excelでは「A3の値を計算に使う式をA3に表示する」というのは出来ません。 例えば、A3の値を3だけ減算しようとしてA3に =A3-3 と書くと「式が循環しています」というエラーになります。 Excelでは「自分自身を参照してはいけない」のです。

frau
質問者

補足

失礼しました。A3は間違いでA4でした。 このようなことを「循環参照」というのですよね。 すでに回答いただいた式 =IF(AND(A1>0,A2=0),A3-A1,IF(AND(A1=0,A2>0),A3-A2,"条件外")) は厳密ですが、もっとシンプルな式 =A3-A1-A2 これでも求めている結果がでます。 内容的には同じだと思いますがこれは関数ではないですよね? どのようなでも関数式にできると思いますが、このような場合でも関数にするほうがよいメリットがありましたら教えてください。

回答No.1

>たとえばA3に、A1かA2いずれかのセルから減算した数を示す場合の関数式を求めることが目的です。 意味不明です。 「A1かA2いずれかのセルから減算した数」って何ですか? これは「A3の値からA1の値を減算した値、または、A3の値からA2の値を減算した値を求めたい」って事ですか? 「何から何を減算して、どこに格納したいのか?」を明確にして下さい。 >=IF(A1<>A2,A3-A1,A3-A2) 間違っています。 以下のように「場合分け」をして考えましょう。 A1の値    A2の値    欲しい結果 ----------------------------------------------------------- 0より小さい時 0より小さい時 ?(条件外) 0より小さい時 0の時     ?(条件外) 0より小さい時 0より大きい時 ?(条件外) 0の時     0より小さい時 ?(条件外) 0の時     0の時     ?(条件外) 0の時     0より大きい時 A3-A2 0より大きい時 0より小さい時 ?(条件外) 0より大きい時 0の時     A3-A1 0より大きい時 0より大きい時 ?(条件外) 上記を踏まえると、式は =IF(AND(A1>0,A2=0),A3-A1,IF(AND(A1=0,A2>0),A3-A2,"条件外")) となります。 =IF(A1<>A2,A3-A1,A3-A2) の式では A1の値    A2の値    欲しい結果  出て来る結果 --------------------------------------------------------------------------------------------- 0より小さい時 0より小さい時 ?(条件外)  A3-A1またはA3-A2(間違い) 0より小さい時 0の時     ?(条件外)  A3-A1(間違い) 0より小さい時 0より大きい時 ?(条件外)  A3-A1(間違い) 0の時     0より小さい時 ?(条件外)  A3-A1(間違い) 0の時     0の時     ?(条件外)  A3-A2(間違い) 0の時     0より大きい時 A3-A2    A3-A1(間違い) 0より大きい時 0より小さい時 ?(条件外)  A3-A1(間違い) 0より大きい時 0の時     A3-A1    A3-A1 0より大きい時 0より大きい時 ?(条件外)  A3-A1またはA3-A2(間違い) になって、結果が間違ってしまいます。 また >A1セルとA2セルの一方は正数、かつ一方は0となる。 と言う条件を付けても「条件に合わない値を入れられるのは防げない」ので「両方とも0の時」や「両方とも0じゃない時」も考慮した式にしないと「条件に合わない状態の時に、嘘の表示をしていまう」事になります。もちろん「マイナスの数値が入っていたらどうするか」も配慮しないとなりません。 こういう場合は「場合分けの表を作って、すべての状況を網羅するように書く」のがセオリーです。 「場合分けの表」は、提示された条件によって、その都度、考慮しないとなりません。 上記の場合は「マイナスの場合、ゼロの場合、プラスの場合」の3つに場合分けしましたが、条件によっては「マイナスを含むゼロ以下の場合、プラスの場合」でも構いませんし「ゼロの場合、ゼロじゃない場合(マイナスとプラス)」でも構いません。 また「どの条件にも一致しない状態の入力はしない」と言う「入力制限」をすれば(例えば、マクロで「マイナスの値は入れられない」とか「両方を同時に0にできない」とか「両方を同時に0以外にできない」とか)であれば「条件に合う物だけを記述して、条件に合わない場合を考慮しない記述をする」のも可能です。 例えば、厳密な入力制限をしているなら =IF(A1<>0,A3-A1,A3-A2) でも可能です これは「A1が0でないなら、必ずA1は正の数でA2はゼロしか有り得ず、さもなくば(A1が0ならば)、必ずA2は正の数でA1はゼロしか有り得ない」と言う「制限」があるので「条件に合わない場合を考慮する必要がない」のです。

frau
質問者

補足

>「A1かA2いずれかのセルから減算した数」って何ですか? >これは「A3の値からA1の値を減算した値、または、A3の値からA2の値を減算した値を求めたい」って事ですか? そのとおりです。 >「何から何を減算して、どこに格納したいのか?」を明確にして下さい。 格納という意味がわかりませんが、 A3の値からA1の値を減算した値、または、A3の値からA2の値を減算した値を一つのセルA3に表示させたいということです。 また、例示してくださった「場合分け」でいえば実際には A1の値    A2の値    欲しい結果 ----------------------------------------------------------- 0の時     0より大きい時 A3-A2 0より大きい時 0の時     A3-A1   この2つだけが求める条件でしたが、関数式の場合は >すべての状況を網羅するように書く ことが式を作るうえで必要なのだとわかりました。 ただすべての関数式を作る際に、このような想定をしなければならないのでしょうか? *「" "」という点を入れる場合はどのようなものに対してでしょうか?

関連するQ&A