- 締切済み
この関数はどのように解読したらよいのでしょうか?
3つあります。いろいろ調べたけどわかりません。関数の作り方を教えてください。 =ABS(A2)*AND(A2<0,A1>0) =ABS(A2)*AND(A2<0,A1=0) =MAX(0,A2)
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- asciiz
- ベストアンサー率70% (6826/9706)
もうあなたは、IF関数の使い方、AND関数の使い方を覚えました。 場合分けがきちんとできたならば、それは式で記述できます。 ただ、条件判断にはもう一つ重要な、OR関数があります。 OR(条件式1, 条件式2,…) という形で使って、条件式のどれか1つでも成立すれば真(1)を返すという関数です。(いずれも成立しなければ偽(0)を返す) この AND と OR があれば、論理的にはどんな組み合わせ条件も式で記述することができます。 ええと例えば、回答7についた新たな質問の中で、[A8]に表示したいのは(7)と(8)ですね。 >❼(入力)A1が正数、A1が0、A3が0➡(A5の結果)A5は負数➡A8に絶対値として表示 >❽(入力)A1が0、A1が正数、A3が0➡(A5の結果)A5は負数➡A8に絶対値として表示 またミスがあるような…A1, A2, A3を条件に使うということでいいですか? (7)の条件式は、AND(A1>0,A2=0,A3=0) です。 (8)の条件式は、AND(A1=0,A2>0,A3=0) です。 この『どちらかが』成立するならば、[A8]に表示すると。 それならば、[A8]用の条件式は OR(AND(A1>0,A2=0,A3=0), AND(A1=0,A2>0,A3=0) ) となるわけです。 そして表示する解は ABS(A5) でいいですか、それなら、 [A8] =IF(OR(AND(A1>0,A2=0,A3=0), AND(A1=0,A2>0,A3=0) ), ABS(A5), "") という式になるでしょう。 他の回答表示セルにおいても、表示のための条件式と、計算式がわかりますから、記述できると思います。 P.S. >・・という新たな疑問です。 新たな疑問は、新たに質問を起こしてください。それが本来のOKWaveのルールです。
- asciiz
- ベストアンサー率70% (6826/9706)
>(1)セルAの合計が正数、かつ、セルBの結果が負数の場合に答えがでる。 >(2)セルAの合計がゼロ、かつ、セルBの結果が負数の場合に答えがでる。 >(3)せるAの結果がプラスの場合に表示される。 >まずA4に設定されている式を「A4-A1-A2」とします。 A4 =A1-A2 でしょうか? じゃないと意味が… いやそうであっても続く質問の意味がよくわからないんですが…。 >ア)A1に正数、かつ、A2にゼロが入っている場合、上記(1)~(3)のいずれかの答えをA6~A8に表示させる >イ)A2にゼロ、かつ、A2に正数が入っている場合、上記➀~(3)のいずれかの答えをA10~A12表示させる >というようなことです。 「答えをA6~A8に表示させる」って考えちゃうと、それはVBA等を使ったプログラミングの考え方になってしまいます。 Excelは、一つのセルには一つの式のみしか記述できません。 なので、次のように考えてください。 『A6は、条件○○の時に、計算結果xxxxを表示する。』 『A7は、条件××の時に、計算結果yyyyを表示する。』 『A8は、条件△△の時に、計算結果zzzzを表示する。』 つまりそれぞれのセルに以下のように設定します。 [A6] =IF(条件○○, 計算xxxx, "") [A7] =IF(条件××, 計算yyyy, "") [A8] =IF(条件△△, 計算zzzz, "") A6の式を解説すれば、条件○○(つまり「AND(A1>0, A2=0)」)の成立時に、「計算xxxx」をする。そうでなければ、「""」(ダブルクォーテーション2つ、空文字列)を表示する(=何も表示されない)。となります。 そしてまたここで、IF関数というのはネスト(入れ子)にすることができます。 つまり上記の「計算xxxx」の部分に、「IF(AND(A2<0,A1>0), ABS(A2), 0)」という式を入れても大丈夫であると。 すなわち、A6式は以下のようになります。 [A6] =IF(AND(A1>0, A2=0), IF(AND(A2<0,A1>0), ABS(A2), 0), "") A7, A8も同様にすればお望みの結果が得られるんじゃないでしょうか…?
- asciiz
- ベストアンサー率70% (6826/9706)
>=IF(AND(A2<0,A1>0), ABS(A2), 0) >のような形の場合、つまりIFに対して()内の1か0を掛ければよいのでしょうか? >つまりIF関数でなくとも関数は数学の式として読むのですか? 失礼、IF関数の説明から必要でしたか(汗 IFというのは、普通のプログラミング言語では条件判断をする命令の一つで、通常は関数ではありません。 例えば Visual BASIC においては、以下のように書きます。 > IF (条件) THEN (真の時に実行する命令) ELSE (偽の時に実行する命令) これを、EXCELに関数の形で取り入れたのが、IF関数なんです。 IF関数の使い方:=IF(条件式, 真の時の値, 偽の時の値) 「条件式」が満たされたとき、IF関数全体の値としては2番目の「真の時の値」が採用されます。 それ以外では、(「条件式」が満たされなかったたとき)、IF関数の値としては3番目の「偽の時の値」が採用されます。 <条件式>の真偽により、2番目と3番目の値どちらかを、選ぶんですね。 プログラミング言語ではないExcelの「式」において、条件判断をできるように工夫されたのが「IF関数」、というわけなのです。 ですから、 >=IF(AND(A2<0,A1>0), ABS(A2), 0) において、「AND(A2<0,A1>0)」という条件式を満たした時は2番目のパラメータである「ABS(A2)」。満たさなかったときは3番目のパラメータである「0」。という値になります。 >=IF(AND(A2<0,A1=0), ABS(A2), 0) こちらにおいても、条件式が少々違うだけで、返す値は 「ABS(A2)」か「0」のどちらかになります。
補足
ありがとうございます。「もしも(IF)」ですからその言語を命令するわけですね。 となると関数である程度のことができると思いますが、応用として以下のようなことは関数式で組み立てられますか?それともプラグラミングの領域でしょうか? たとえば =IF(AND(A2<0,A1>0), ABS(A2), 0)等について要約すると (1)セルAの合計が正数、かつ、セルBの結果が負数の場合に答えがでる。 (2)セルAの合計がゼロ、かつ、セルBの結果が負数の場合に答えがでる。 (3)せるAの結果がプラスの場合に表示される。 となると思いますが、これを以下のように応用します。 まずA4に設定されている式を「A4-A1-A2」とします。 ア)A1に正数、かつ、A2にゼロが入っている場合、上記(1)~(3)のいずれかの答えをA6~A8に表示させる イ)A2にゼロ、かつ、A2に正数が入っている場合、上記➀~(3)のいずれかの答えをA10~A12表示させる というようなことです。 答えをだすのに大変苦慮しております。どうかお力をお貸しください!
回答No.3の追加説明です。 提示の数式で1番目の「AND(不等式1,不等式2)」と2番目の「AND(不等式,等式)」について理解不足のように思われます。 例えばA2=-5000、A1=5000のとき次のようになります。 AND(A2<0,A1>0) → AND(-5000<0,5000>0) → AND(TRUE,TRUE) → TRUE AND演算の結果のTRUEは数値の1に評価されます。 AND(A2<0,A1=0) → AND(-5000<0,5000=0) → AND(TRUE,FALSE) → FALSE AND演算の結果のFALSEは数値の0に評価されます。 因って、1番目の数式は次のようになります。 =ABS(-5000)*AND(-5000<0,5000>0) → 5000*1 → 5000 2番目の数式は次のようになります。 =ABS(-5000)*AND(-5000<0,5000=0) → 5000*0 → 0 尚、A2が0のときはAND(A2<0、A1>1000)とAND(A2<0,A1=0)は何れも結果がFALSEになりますので1番目の数式と2番目の数式の演算結果は0になります。
お礼
具体的な回答でよく理解できました!ありがとうございます。
- asciiz
- ベストアンサー率70% (6826/9706)
>まず「True または1」の「1」、「False または0 」の「0」は二進法の1か0かということでしょうか? 元の意味合いはそうなのですが、Excelの扱えるデータ型は「数値」または「文字列」しか存在しませんので、Excel上においては 0=False(偽) 0以外=True(真) として扱っています(真偽判定する場合)。 ですが、AND, OR, NOT といった真偽値を返す論理関数では、真の時の値を返す時に5とか10とか999やらが返ってきても困りますんで、真の時は1を返す、と決め打ちになっているわけです。 >A2=0 >A1=5000 >または >A2=-1000 >A1=4000 > >の場合、いずれのA2も「0」または負の数(絶対値0)であり、A1は正の数となりますが >A2<0 とA1>0 >が「同時に満たされた」ので「True または1」となる。 落ち着いてください~~! >A2=0 >A1=5000 この例において、A2はゼロであって、『ゼロより小さくはありません。』 ということは、「A2<0 かつ A1>0」の前半が満たされませんので、AND関数の値は0です。 となると、ABS(A2)にゼロをかけることとなり、答えはゼロです。 >A2=-1000 >A1=4000 この例では、確かに「A2<0 かつ A1>0」を満たします。 そうすると、ABS(A2) ×1になりますので、A2の絶対値、1000が答えとなります。 Excelの比較演算子、~より大きい「>」、~より小さい「<」、以上「>=」、以下「<=」。 以上・以下では、判定の値自体を含みますが、より大きい・小さいでは、判定の値ピッタリは、含みません。 これらをきっちり認識して使い分ける必要があります。 >Excelにおける比較演算子 >https://www.officepro.jp/excelfunc/ini/index2.html ---- >2つ目の式「=ABS(A2)*AND(A2<0,A1=0)」も本来なら > >=IF(AND(A2<0,A1=0), ABS(A2), 0) > >これは「A2が0より小さく、かつ、A1が0である時には0となる。それ以外は0」 > >ということでよいかと存じます。 惜しいです、条件が満たされた時の値は「ABS(A2)」ですね。なので 「A2が0より小さく、かつ、A1が0である時には『ABS(A2)』となる。それ以外は0」 となります。(そのつもりでしたかね^^;) P.S. MAX関数をIF関数に展開したのは蛇足でした(汗 MAX関数そのものの方がわかりやすいと思いますので、MAX関数の方を覚えてください。 MAX関数: 指定された任意個数のパラメータの中で、一番大きい値を返します。 例1) =MAX(1,2,3,4,5) →5が一番大きいので5になります 例2) =MAX(1,5,4,2,3) →やはり5が一番大きいので5になります(つまり順番は関係ありません) 例3) =MAX(-3,-2,-1,0,1) →1が一番大きいので1になります 例4) A2=5の時、=MAX(0,A2) →A2の5が一番大きいので5になります 例5) A2= -5の時、=MAX(0,A2) →マイナス値であるA2よりも0の方が大きいので0になります まあMAX関数を2パラメータで使う場合、2つのうちどちらを選びますか、っていう『選択』になるので、それがIF関数的だな、と思っただけなのです。
補足
だんだんわかってきました。 まず「真の値」ということは「ある」として考える、つまりそれを数値の「1」とし、逆に「偽の値」=「なし」=「0」として考えるということですね。 >「A2<0 かつ A1>0」の前半が満たされませんので 落ち着きました(笑)そのとおりでした。 また2番目については1番目の式を単に読みかえただけですが違うのですね。 =IF(AND(A2<0,A1>0), ABS(A2), 0) =IF(AND(A2<0,A1=0), ABS(A2), 0) 「=」の違いだけですのに、前者は「0より大きい時に、1となる」のに なぜ後者は「0である時には『ABS(A2)』となる」のでしょう?? 「=」すなわち「ABS」という意味なのでしょうか? また =ABS(A2)*AND(A2<0,A1>0) この式は掛け算の記号が入っているのでABS(A2) ×1ということがわかりますが =IF(AND(A2<0,A1>0), ABS(A2), 0) のような形の場合、つまりIFに対して()内の1か0を掛ければよいのでしょうか?つまりIF関数でなくとも関数は数学の式として読むのですか?
>この関数はどのように解読したらよいのでしょうか? 最初補数式 「 =ABS(A2)*AND(A2<0,A1>0)」は次のようになります。 A2の値が0より小さく(負数)A1が0より大きいときA2の絶対値が得られます。 「A2の絶対値」とは「A2が負数のとき-符号を取った正数」のことです。 A2が0以上(正数)のとき、または、A1が0以下のときは0になります。 代替の数式としてIF関数を使うと次のようになります。 =IF(AND(A2<0,A1>0),ABS(A2),0) 2番目の数式 「=ABS(A2)*AND(A2<0,A1=0)」は次のようになります。 A2の値が0より小さくA1の値が0のときA2の絶対値が得られます。 A2が0以上のとき、または、A1が0ではないときは0になります。 代替の数式としてIF関数を使うときは1番目の数式の代替の数式を参考に書き換えてみるとレベルアップになるでしょう。 3番目の数式 「=MAX(0,A2)」は0またはA2の値の内大きい方の値になります。 値は小さい順に並べると負数→0→正数になります。
- asciiz
- ベストアンサー率70% (6826/9706)
> =ABS(A2)*AND(A2<0,A1>0) これは、普通ならIF関数で書くところを、数字のテクニックを使って短い式で済ませている書き方ですね。 AND 関数は、両方の条件を満たす時に真(1)、どちらか一方でも満たさないときには偽(0)を返します。 (本来この 0/1 を計算に使うのは邪道なんですが。) 「AND(A2<0,A1>0)」 この部分は、「A2が0より小さく、かつ、A1が0より大きい時に、1となる。それ以外は0」となります。 それを、「ABS(A2)」と掛け算することにより、「=ABS(A2)*AND(A2<0,A1>0)」 という式は、 「A2が0より小さく、かつ、A1が0より大きい時に、ABS(A2)となる。それ以外は0」 というように動作します。 つまり本来ならば、 =IF(AND(A2<0,A1>0), ABS(A2), 0) という式と同値なのです。 IF関数での書き方ならば、理解するのに何の疑問もないと思いますがいかがでしょうか。 数字のテクニックを使った式の方がちょっとだけ短くなりはしますが…非常に理解がしづらくなる書き方ですので、理解はしても、このしくみを使ってバンバン式を書くのはあまりお勧めできません。 ご質問2つ目の式も、同じ理屈です。 3番目の式は、単なるMAX関数ですが(複数のパラメータのうち、一番大きいものの値になる)、何か疑問がありますでしょうか…。 まあ、「=MAX(0,A2)」をあえてIF関数で書き直すと、 =IF(A2>0, A2, 0) 「A2が0より大きい時は、A2そのものの値、そうでなければ0」 というように理解することも可能です。 (MAX関数は3つ以上のパラメータを書くことも可能ですので、それをIF関数に書き直すとすごく長くなってしまいますが…。)
お礼
あと本来の式も示してくださってありがとうございます。 このサイトでの回答でしたが、略式だったのですね。関数、まだ学び始めですからこれでは確かにわからないわけですね。 2つ目の式「=ABS(A2)*AND(A2<0,A1=0)」も本来なら =IF(AND(A2<0,A1=0), ABS(A2), 0) これは「A2が0より小さく、かつ、A1が0である時には0となる。それ以外は0」 ということでよいかと存じます。 A2=-5000 A1=5000 の場合、A2は「A2が0より小さく」という条件に満たされている。 A1は「A1が0より大きい時に、1となる」という条件に満たされている。 A2は0とみなす。この式は「True または1」となる。 答え➡0×5000=0 となりますが、実際のExcelで試したところ5000と出ます。 どこが間違っているのでしょうか? 頭んなか大混乱してきたので3番目 =IF(A2>0, A2, 0) については余裕がありませぬ!どうかよろしくお願いいたします。
補足
お詳しいご回答で助かります! ちょっとよく考えてみました。もっと具体的な数字に入れ替えてみます。 まず「True または1」の「1」、「False または0 」の「0」は二進法の1か0かということでしょうか? 以下に例示します。 A2=0 A1=5000 または A2=-1000 A1=4000 の場合、いずれのA2も「0」または負の数(絶対値0)であり、A1は正の数となりますが A2<0 とA1>0 が「同時に満たされた」ので「True または1」となる。 答え➡ ・0×5000=5000 ・0×4000=4000 このような考え方で正しいでしょうか?
- mdmp2
- ベストアンサー率55% (438/787)
ABS(A2) は、A2 の絶対値((数値がマイナスの時はマイナス符号を除いた値)を返します。 AND(A2<0,A1>0) は、A2<0 とA1>0 を同時に満たした時「True または1」そうではない時「False または0 」を返します。 =ABS(A2)*AND(A2<0,A1>0) は上記二つの関数の積ですから、 例えばÅ2=-2, A1=1 ならば、答えは2 それがわかれば、ABS(A2)*AND(A2<0,A1=0) については説明は要らないでしょう。 =MAX(0,A2) は、 MAX関数は、複数の数値のうち、最大の値を返します。 0 とA2 の大きい方を返しますので、例えば、 A2=-1 なら、答えは0 Å2=2 なら、答えは2
補足
ご回答ありがとうございます。 (A2<0,A1>0) はどういう意味でしょうか? A2は0よりも小さく、A1は0より大きい場合とよむのでしょうか? 0よりも小さいのでしたらマイナスになってしまいますがそれは絶対値(マイナスをマイナスとしてみない)として設定しているのでかまわないのですか?しかしそれならばわざわざそのようなことをする必要はなく「A2<0」とすればよいと思いますが・・ この箇所が読めないので答えが2ということもわかりません。 当方まったくの素人ですのでもう少し具体的にご教授いただけると助かります。
お礼
ただこれらは2つのセルに対し一方は正数、一方は0という場合ですよね。 つまり上の ア)A1に正数、かつ、A2にゼロが入っている場合、上記(1)~(3)のいずれかの答えをA6~A8に表示させる イ)A2にゼロ、かつ、A2に正数が入っている場合、上記➀~(3)のいずれかの答えをA10~A12表示させる という条件だからこそできたことですが、これが3つになった場合には上記のようなことが関数でできるのか・・という新たな疑問です。 条件は以下です。 ➀A5には以下の数式が入る =A4-A1-A2-A3 (2)A4には必ず正数か0が入り負数は入れない (3)A5からA4を減算した結果を絶対数とする (4)(3)にでた結果は以下の条件どおり、それぞれの回答欄にその答えをだす。 A1の値が正数のとき、対するA3は必ず0である。 同様、A3の値が正数のとき、対するA1は必ず0である。 これらの条件のとき、A2は必ず0となる。 という場合です。 また答えをA6~A8に表示させることは変わりません。 これら入力パターンを示すと以下となります。 ❶(入力)A1が正数、A1が0、A3が0➡(A5の結果)A5はゼロ➡A6に絶対値として表示 ❷(入力)A1が0、A1が正数、A3が0➡(A5の結果)A5はゼロ➡A6に絶対値として表示 ❸(入力)A1が0、A1が0、A3が正数➡(A5の結果)A5はゼロ➡A10に絶対値として表示 ❹(入力)A1が正数、A1が0、A3が0➡(A5の結果)A5は負数➡A7に絶対値として表示 ❺(入力)A1が0、A1が正数、A3が0➡(A5の結果)A5は負数➡A7に絶対値として表示 ❻(入力)A1が0、A1が0、A3が正数➡(A5の結果)A5は負数➡A11に絶対値として表示 ❼(入力)A1が正数、A1が0、A3が0➡(A5の結果)A5は負数➡A8に絶対値として表示 ❽(入力)A1が0、A1が正数、A3が0➡(A5の結果)A5は負数➡A8に絶対値として表示 ❾(入力)A1が0、A1が0、A3が正数➡(A5の結果)A5は負数➡A12に絶対値として表示 ❿(入力)A1が正数、A1が0、A3が0➡(A5の結果)A5は正数➡A9に絶対値として表示 (11)(入力)A1が0、A1が正数、A3が0➡(A5の結果)A5は正数➡A9に絶対値として表示 (12)(入力)A1が0、A1が0、A3が正数➡(A5の結果)A5は正数➡A13に絶対値として表示 これらパターンの成立は関数式でできますでしょうか?
補足
失礼しました。A4=A3-A1-A2 です。 「答えをA6~A8に表示させる」については [A6] =IF(条件○○, 計算xxxx, "") とおっしゃられる通り理解しております。 ですのでA7については =IF(AND(A1<>0,A3>0,A4<0),ABS(A4),"") の式でできました。