• ベストアンサー

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/17069)
回答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/17069)
回答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