• ベストアンサー

EXCELの関数で大なり記号を複数入れるには?

EXCELの関数で困ってます。 A,B,E,Rという4つの数字があって 数値の大小によって条件分けをしたいのですが、 ある程度規則性のある数値が入りますので6パターンしか出てきません。 (1)E<R≦A,B (2)E<A<R≦B (3)E<A,B<R (4)A,B<E<R (5)A<E<R≦B (6)A<E<B<R (1)の式で、AND(E<R<=A,E<R<=)としても 小なり(<)や小なりコール(≦)は一つの式に複数入れられないのか 数値はあっていてもFALSEになってしまいます。 ((E<R)≦A)などとかっこを使ってひとつずつ判断するのかなと 思いましたがそれもダメでした。 関数で大なりや大なりイコールを複数使用するにはどうすればいいのでしょうか? ひとつの式に複数小なり記号を入れられるとすると 単純にANDで2つの条件を入れようかと思いますが 他にスマートな入力方法はありますか? はじめはAND(RANK(E,範囲,0)=1,OR(RANK(A,範囲,0)=4,RANK(B,範囲,0)=4)) もしくはAND(RANK(E,範囲,0)=1,RANK(R,範囲,0)=2)などと入れてましたが 単純に大なり小なりで入れる方が短かそうだったので…。 他にスマートな入力方法があれば教えて頂けると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • sige1701
  • ベストアンサー率28% (74/260)
回答No.6

No.2 さんが条件をまとめていますので (1)=(_E<_R)*(_R<=_A)*(_R<=_B) (2)=(_E<_A)*(_A<_R)*(_R<=_B) (3)=(_E<_A)*(_E<_B)*(_A<_R)*(_B<_R) (4)=(_A<_E)*(_B<_E)*(_E<_R) (5)=(_A<_E)*(_E<_R)*(_R<=_B) (6)=(_A<_E)*(_E<_B)*(_B<_R) 条件を整理すると (1)~(3)までを見ると 共通しているのは (_E<_A)     (1) (_R<=_A)     (2)~(3) (_R>_A)        (2) (_R<=_B)        (3) (_R>_B) (4)~(6)までを見ると 共通しているのは (_A<_E)     (4) (_B<_E)     (5)~(6) (_E<_B)        (5) (_R<=_B)        (6) (_R>_B) =IF(E<A,IF(R<=A,1,IF(R<=B,2,3)),IF(B<E,4,IF(R<=B,5,6)))

INU_CHI
質問者

お礼

ご回答ありがとうございます。 6つのパターンと申しましたが、E<Rなど無視していい条件も含まれてるので 最初にまとめてしまえばいいんですね。 IF~の階層が深くなるとかなりしつこい式になりますけど、この式だとすっきりしててわかりやすいです。 今回はこの方法を参考にさせて頂きます。 ありがとうございました。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

#5です。補足していただいた課題の内容を十分判ったとはいえませんが、思いついたことを述べます。 エクセルにはユーザー関数の作成があります それに持ち込んで、 Function aaa(a, b, c, d) If a > b And c > d Then aaa = 1 ElseIf a > b And c < d Then aaa = 2 ElseIf b >= a And c > d Then aaa = 3 End If End Function のように書けば、AND、 OR とElseifの書き方で質問は処理できるのではと思いました。 上記の分類例は、説明を易しくするため、質問の内容とは関連させていませんのでご注意を。 分類コードを返しています。 例 A-Dデータ  E列関数結果 A列  B列   C列   D列   E列 3 2 5 3 1 3 2 4 7 2 2 2 6 4 3 E列は =aaa(A1,B1,C1,D1)のように普通の関数と同じ書き方でよい。 判別に使う場合は、=IF(aaa(A1,B1,C1,D1)=1,○,X)のようになります。 aaaの名前については既存の関数の名前以外ならよい。 a>=bも記述できる。ANDも、IfからThenまでに、2つ3つ連ねても良い。 だから質問の表現の通り、上記要領で書いていけばよい。 ーー ただ区分けがうまく行ってないと、最初の該当行で結果を返すので、 課題解決としては混乱する。別途「2区分以上で該当が無い」よう分類分けを考える必要はある。 ーー これを言うのも、VBAプログラムのほうが記述に自由度が有るためです。こちらVBAでも、Between(SQL文でのみ使える)は定義しないと使えませんので考えていません。 VBAといっても上記は、未経験者も類推できる簡単な記述なので、説明してみました。上記コードは、ツールーマクローVBE-挿入ー標準モジュールの画面に貼り付けるものです。

INU_CHI
質問者

お礼

ご回答ありがとうございます。 EXCELの関数で大なり記号を複数入れるには?というのが今回の質問の趣旨でした。 下手に6パターンの条件を記載してしまったので、 "この式の書き方"を教えて下さい"という趣旨と思われたならお詫び致します。 出来ないとわかった時点で閉じればよかったのですが…。 あと、VBAは"ちょこっとかじった"位のレベルでしたが、 3年程前にVBAエキスパートという資格を取得した際に、 素人ながらではありますが結構勉強しましたので、 やりたいことを考えてVBEでコードを書いていくとかフォームを作ったりする程度なら 問題ない程度には理解してますし、imogasi様のおっしゃりたい事もわかります。 ただ、今回は職場で共有するデーターを作成してますのでマクロをつかわずに やってみようと思ったのですが、 (開く時に何か聞かれるからコワイって方結構おられるので逆に面倒なんです(;´_`;)。 各PCのセキュリティレベルを低にするわけにもいきませんし…。) 複数大なり小なりをいれられないのにびっくりしたので質問させて頂きました。 色々とありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

エクセルにはBetweenのような表現は出来ないから、「から」「まで」の判定は、=AND(「から」の数値より大きい,「まで}より小さい) という表現になる。からとまでに等しい場合を含めるかどうかは、課題の状況に従う。 等号演算子をIF関数の第1引数のところへ、2つ以上入れてはならない。普通の結果と、別の意味になるようだ。 >AND(E<R<=A,E<R<=) =IF(A1<B1<C1,"A","B") ーー 問題の書き方だが、あまり抽象化・記号化しないほうがわかりやすい。またエクセルではセル番地で書くべきだ。定数なら定数で。 ーー RANKの記述が有るが、具体的に、文章で表せば、どういうことがしたいのか?

INU_CHI
質問者

お礼

ご回答ありがとうございます。 >等号演算子をIF関数の第1引数のところへ、2つ以上入れてはならない。普通の結果と、別の意味になるようだ。 やはりそうなってしまうのですね。 ( )で括ると括るところによってFALSEになったりTRUEになったりはしましたが答えはあっていませんでした。 >問題の書き方だが、あまり抽象化・記号化しないほうがわかりやすい。またエクセルではセル番地で書くべきだ。定数なら定数で。 A/B/E/Rは名前定義しており、実際には_(アンダーバー)を前につけてます。 数式を表記する際は式通りに記載すべきでした、すみません。 どういうことがしたいのかについてはNo.3の方にご回答頂いた欄で補足させて頂きました。

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.4

提示された式から6パターンを見ると すべて E<R なので この条件は省略可なのかな?

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.3

>ある程度規則性のある数値が入りますので6パターンしか出てきません。 >(1)E<R≦A,B >(2)E<A<R≦B >(3)E<A,B<R >(4)A,B<E<R >(5)A<E<R≦B >(6)A<E<B<R >他にスマートな入力方法はありますか? 条件が不明です 「ある程度規則性のある数値」について式の提示ばかりでなく 説明を記載下さい 例 (1)であれば =SMALL((A,B,E,R),2)=R でも良いのかな 条件が不明ですので参考までに

INU_CHI
質問者

補足

ご回答頂きありがとうございました。 図示しないと説明が難しそうだったので、はしょってしまいすみませんでした。 つたない説明でおわかり頂けるか不安ですが…各値の説明としては、 縦に細長い通路があったとして、その横幅(短辺)の中心に2つ重ねたフラフープを置き、 1つだけを進行方向(長辺)に平行移動した状態をイメージして下さい。(長辺は無限にあります) 上の玉を強く押してめりこませた雪だるまのイメージです。 最終的にその円の重なった部分の面積を出したいのですが、 A/B/E/Rの4つは変数な為、それぞれで面積を求める計算式がかわってくるので最初に振り分けをしたかったのです。 Aは横幅の左端から円の中心までの距離で、Bは右端からの距離(中心におけばもちろんA=B)。 Rは円の半径、Eは2つの円の交点から円の中心までの距離(ご指摘の通りE<Rは確定です) A=Bとして、A+B>R*2となれば円は全て通路内(A+B)におさまりますが、小なりなら左右対称にはみ出ます。 またA+B>R*2だったとしてもAとBが極端に違えば左右どちらかだけがはみ出ます。 具体的には、条件(2)E<A<R≦BだとA側のみはみ出ますが、 E<Aなので円の交点とAのラインまでにラッパの先のような部分ができるのでそこも求めてひかなくてはいけなく、 条件(5)A<E<R≦Bだと同じくA側のみはみ出ますがA<Eなのでラッパの部分ができません。 そうやって考えていくと6パターンの式でいいという事になったので、どれにあてはまるかを関数で導きたかったのです。 面積を求める数式は(1)~(6)までのパターンで作成済みなので条件分けだけが希望です。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

外しているような気もしますが、こういうことでしょうか? (1)=(_E<_R)*(_R<=_A)*(_R<=_B) (2)=(_E<_A)*(_A<_R)*(_R<=_B) (3)=(_E<_A)*(_E<_B)*(_A<_R)*(_B<_R) (4)=(_A<_E)*(_B<_E)*(_E<_R) (5)=(_A<_E)*(_E<_R)*(_R<=_B) (6)=(_A<_E)*(_E<_B)*(_B<_R) これら条件(1)~(6)が複数同時に成立する事がないのなら、こんな風に書く事でどの条件が成立したかを出すことも出来ます。 =1*(_E<_R)*(_R<=_A)*(_R<=_B)+2*(_E<_A)*(_A<_R)*(_R<=_B)+3*(_E<_A)*(_E<_B)*(_A<_R)*(_B<_R)+4*(_A<_E)*(_B<_E)*(_E<_R)+5*(_A<_E)*(_E<_R)*(_R<=_B)+6*(_A<_E)*(_E<_B)*(_B<_R)

INU_CHI
質問者

お礼

ご回答頂きありがとうございました。 最初に拝見した時は、何故"*"?とびっくりしましたが、 TRUEが1,FALSEが0であるのは知ってたのに、 条件をそれぞれかっこでくくってTRUE or FALSEを出したあと かけて0にならなければ最終的にTRUE(1)となる…とは考えつかなかったです! 6パターン全部を一つの式に入れ込んで一発で何番にあてはまるのかまで出せると、 結果を表すためだけのセルも不要なのでのでとてもスマートですね。 mt2008さまのように柔軟な発想をもつ方をうらやましく思います。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

AND関数には、3つ以上の条件式を入れることができます。 なので、E<A<R≦Bであれば、AND(E<A,A<R,R<=B)とすれば良いです。

INU_CHI
質問者

お礼

ご回答頂きありがとうございました。 (2)では条件が3つなのでOKですが、(3)E<A,B<Rですと条件が多いのでかなり長くなってしまいます。 それを避けてスマートに記載(一つの式に複数の小なり記号)が出来ないものかと質問させて頂きました。 質問の仕方がまずくてすみません<(_ _)>。

関連するQ&A

  • エクセルのIF関数について

    エクセルの数式でIFを使って、下記のような複数の条件の時に、それぞれの計算結果を算出する式を作りましたが、単純に条件を並べただけで(IFとAND使用)、式が長くなってしまいます。これを短く出来る式の方法はありますでしょうか?(他の関数を使用する方法など)また、エクセルの関数の数式を応用編まで詳しく調べられるサイトをご存知でしたら教えてください。 (条件の例)R1への式入力 (1)A1がに"A"か"B"かを入力 (2)A1がAで、B2の値がC3以下の時、R1には8、C3より大きい場合は、B2-C3の値を表示 (3)A1がBで、B2の値がC3以下の時、R1には5、C3より大きい場合は、(B2-C3)/2の値を表示 といった条件を満たすものが作成したいです。 ちなみに私が作成した式は、 =IF(AND(A1=A,B2<=C3),8),IF(AND(A1=A,B2>C3),B2-C3,・・・・)って感じです。こんな方法しか無いでしょうか?

  • エクセル 関数について

    入力データ A1~A10に数値10 B1~B20に数値20 C1~C10に数値30が入力されています 質問 A1~C10の範囲内から、E1に数値 0~10の個数、E2に数値11~20の個数、E3に数値21~30の個数、 E4に数値10~30以外の個数を関数を使って計算させるには、どのようにしたらよいのでしょうか? 現在 COUNT、COUNTIF、FREQUENCYを使ってみたのですが、、、うまくいきませんでした。 何か良い アドバイスを下さい 宜しくお願い致します

  • Excel 複数範囲で順位付け

    MS-Excelで、複数の範囲において、それぞれの値の順位を調べようと思い、AVERAGE関数やMAX関数などと同様に、RANK関数でも複数の範囲を指定してしようとしたのですが、範囲をカンマで区切るのはできないようです。 たとえば、 範囲:A1:A5,C1:C5 調べたい数値が入っているセル:A1 のときに、 RANK(A1,A1:A5,C1:C5) とすると、RANK関数の書式は、 RANK(数値,範囲,[順序]) なので、C1:C5が順序扱いとなり、エラーになってしまいます。 複数範囲に名前をつけて、範囲に名前を指定してみましたが、それでもエラーになりました。 どうすれば、複数の範囲において順位を調べられるのでしょうか? RANK関数にはこだわっていません。 マクロでも構いません。 よろしくお願いします。

  • Excelの関数についての質問です。

    Excelの関数に詳しい方、ご教授お願いします。 B3に-24.2、B4に-18.9、B5に-17.1と数値が入力されているとします。 E3のセルのところに、下記条件に合う関数を入れたいのです。 B3の値が-19.5~-20.4の範囲なら、-4と表示 もしくは、 -20.5~-21.4の範囲なら、-3と表示 もしくは、 -21.5~-22.4の範囲なら、-2と表示 もしくは、 -22.5~-23.4の範囲なら、-1と表示 もしくは、 -23.5~-24.4の範囲なら、 0と表示 もしくは、 -24.5~-25.4の範囲なら、+1と表示 それと、F3のセルに C3の数値とE3の数値の合計が+5~-10の範囲に入れば「○」、範囲外なら「×」を返す。 以上2点の質問です。どなたかよろしくお願いします。

  • エクセルの関数を教えてください。

    セルHにIFとANDを使って下記内容の関数式を入力したいです。 セルAからセルF内すべてに数値が入っていたらセルFを返す、 セルFが空欄ならばセルEの数値を返す、 セルEも空欄ならばDの値を、 Dも空欄ならばCの値を、Cも空欄ならばBの数値を、 Bも空欄ならばAの数値を返し、 Aも空欄(つまりAからF内に数値なし)ならばスペースを返す。 わかる方、教えてください。 よろしくお願いします。

  • エクセルのRANK関数についてです。

     エクセルを使っていまして、その中の関数にRANKという関数があるわけですが、書式は =RANK(数値,範囲,順序) になりますが、この範囲のところにSUM関数を入れることはできるのでしょうか? =RANK(数値,SUM(B2:B5),順序) という形でSUMをRANK関数の中に入れることは可能でしょうか?私自身も何度も試してみましたが「入れた数式は正しくありません」というエラーが出てしまいました。

  • エクセルEXCELの関数

    エクセルの関数で、どのように式を立てれば良いか分からず困っています。 A、B、C、Dの4個のセルに数値が入力されています。 条件1 AとCまたはBとDのいずれかが100を超えている。 条件2 上の条件から残されたセルの数値は60未満 これが勝ちの条件と定義しています。 逆に 条件3 AとCまたはBとDのいずれも100を超えていない。 条件4 上の条件から残されたセルの数値は60以上 これを負けの条件と定義しています。 このいずれにも含まれないのを引き分けと分類分けしたいのですが どのようにすればいいでしょうか?

  • エクセル関数=IF(AND())で質問します。

     初めまして、よろしくお願いします。 エクセルで     A    B    C    D    E    F 1   1   10   5   3    4  2            ・ 3            ・ このような表にB1、C1、D1三つの値の内一つでもE1より2倍以上の値がある場合にA1の値を抜き出す関数をF1に入力したいのですが、関数式 =IF(AND((B1)>=E1*2),A1,"") までは解るのですが、B1のみではなく、B1からD1までの範囲をどのようにすればいいのか解りません。  解る方、よろしくお願いします。

  • エクセル関数 複数の条件について教えて下さい

    エクセルで以下のような表を作りたいと思います。 関数を使えば作れるのでしょうか? A1のセルには年齢 B1のセルには年収 を入力するとCのセルにレベルS~Dが自動表記される。 例えば(単位千円) 1)44歳 5800 Cランク   38歳 7800 Aランク   38歳 5800 Bランク   30歳 9000 Sランク 要は2つの条件でCのランクが決定されるというイメージです。 宜しくお願いします。   

  • エクセルのMAX関数を複数条件で

    エクセルのMAX関数を下記のような複数条件をつけて 使いたいのですが、自分で式を書いてもうまくいきません。 アドバイスをよろしくお願いします。 A1に「部署名」、B1に「受注個数」、C1に「受注日」と見出しをし (A2:C9)にデータを入力した表があるとします。 部署名には営業1部、営業2部、営業3部のいずれかが入力されていて、 受注日には6月22日と、6月23日のいずれかの入力があるとします。 この表で「営業1部」であり、「6月22日」のものである受注個数の 最大の値を返したいのです。 日付「6月22日」は別途(E2)に参照用として入力したものを使いたいです。 =MAX(IF(AND(A2:A9="営業1部",C2:C9=E2),B2:B9,"")) これではダメでしょうか。 初歩的ですみません、よろしくお願いいたします。

専門家に質問してみよう