• ベストアンサー

IF関数以外の関数で条件付けしたいです。

ある値Xがあって、X<=aの時F(y), a<X<=bの時G(y), b<X<=cの時H(y), c<X<=dの時I(y),……と入力したいのですが、IF関数を使用すると、括弧がいっぱいになって大変です。何か他に良い関数はありませんか?

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

  • ベストアンサー
  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.3

CHOOSE関数を使って  =CHOOSE(SUMPRODUCT(({a,b,c,d}<X)*1)+1,F(Y),G(Y),H(Y),I(Y),J(Y)) とすれば、a,b,c,dを境界値とする「○より大、□以下」の判定を行い、 対応する演算の結果を返すことができます。 例えば、下記の数式は、  =CHOOSE(SUMPRODUCT(({5,10,20,50,100}<A1)*1)+1,B1,B1+1,B1*2,B1/3,MOD(B1,4),ROUND(B1,5)) ・    A1 <= 5 のとき B1 ・  5 < A1 <= 10 のとき B1+1 ・ 10 < A1 <= 20 のとき B1*2 ・ 20 < A1 <= 50 のとき B1/3 ・ 50 < A1 <=100 のとき MOD(B1,4) ・100 < A1     のとき ROUND(B1,5) を返します。 以上ご参考まで。 -------------------------------------------------------- パッと見た感じはVLOOKUP課題のようにも見えるのですが……。 まず、VLOOKUPのTRUE型判定は「○以上、□未満」の判定ですから、 ご質問のケースのように「○より大、□以下」の判定をするとなると、 ・最小単位を加え「1000;2000;3000」でなく「1001;2001;3001」を境界値として作表する あるいは、 ・基準値の符号を入れ替えて逆順に作表する といった工夫が必要になります。 また、VLOOKUPを使う場合には、 ・判定の結果に対応する値を返す あるいは ・判定の結果に対応する値を使って同一の演算を行う  (判定の結果に対応する値を引数とする同一の関数の結果を返す) ことはできますが、 ・判定の結果に【対応する演算】を行う  (判定の結果に対応する異なる関数の結果を返す) ことはできません。 以上念のため。

その他の回答 (2)

  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.2

昇順に並べた別表から検索するVLOOKUP関数をお試しください。 VLOOKUP関数【あいまい検索編】 http://kokoro.kir.jp/excel/vlookup-true.html

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

VLOOKUPやLOOKUP関数で如何でしょうか。 詳細はhelp、サイト検索から参照下さい。

関連するQ&A

  • EXCELのIF関数の入れ子について

    すみませんよろしくお願いします。 EXCELでセル(A1)~(L1)までに不特定の文字列が入力されており、(M1)に「もし(L1)が入力されていたら(L1)の値を表示、もし(L1)がブランクなら(K1)の値を表示、もし(K1)がブランクなら(J1)の値を表示、もし(J1)がブランクなら(I1)の値を表示・・・・」といった具合で関数を作成したいのです。また、(A1)~(L1)のセルで穴あき状態で入力されていた場合は最も(L1)寄りのセルを表示させたいです。 EXCEL2003のIF関数だと、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="","",E2),F2),G2),H2),I2),J2),K2),L2) で最後の(A1)までの入れ子を作ることができせん。 EXCEL2007を使用すると、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="",IF(D2="",IF(C2="",IF(B2="",IF(A2="","",A2),B2),C2),D2),E2),F2),G2),H2),I2),J2),K2),L2) と作成できます。 EXCEL2003で作成するいい方法はありますでしょうか? ご指南の程よろしくお願いします。

  • エクセル【IF関数、OR関数】について

    先ほどの質問(http://okwave.jp/qa/q6870449.html)の続きというか補足です。 具体的には、 ・F列またはG列に、X5またはX6またはX7またはX8またはX9またはX10のいずれかの値が入れば、I列に「A」と表示させる。 ・F列またはG列に、X14またはX15またはX16またはX17またはX18のいずれかの値が入れば、I列に「B」と表示させる。 ・F列またはG列に、X23またはX24またはX25またはX26またはX27またはX28のいずれかの値が入れば、I列に「C」と表示させる。 ということがやりたいです。 X列の値は全て文字列(人名)です。 先ほどいただいた回答の、 =IF(COUNTIF(X5:X10,F3)+COUNTIF(X5:X10,G3),"A",IF(COUNTIF(X14:X18,F3)+COUNTIF(X14:X18,G3),"B",IF(COUNTIF(X23:X28,F3)+COUNTIF(X23:X28,G3),"C",""))) という式を入れてみましたが、F列、G列が空白でも「A」と表示されてしまいました。 教えてgooを利用するのは初めてなので、おかしなことをしていたら申し訳ありません。

  • 複数の関数からなる関数

    教えてください。 化学系卒なので数学の知識は深くありません。 [A]と[B]からなる[C]という要素があったとします。 [A]は、[A]を構成する「x」により、A=f(x)で表されるとします。 同じく [B]も、[B]を構成する「y」により、B=g(y)で表されるとします。 さて、ここで[C]ですが [C]は[A]と[B]より表現できる(はず)ので、 「C=h(f(x),g(y))」の形で表したいのですが、やり方、手順等々がわかりません。 C=h(f(x),g(y)) と抽象的?に書くのではなくて、 具体的中身のある関数形で表現できるようにしたいです。 f(x)とg(y)が互いに独立であれば、【 C=a*f(x)+b*g(y)+c 】でよいかと思いますが 「a」と「b」の数値の出し方がわかりません。 [a*f(x)]*[b*g(y)]や、[a*f(x)]^[b*g(y)],[a*f(x)]*e^[b*g(y)]だったりすると もうお手上げ状態です。 これら複数の関数がどう位置づけられるか、 このようなことを得意とするツールがあればご教授ください。 (フリーであればなお助かります。) また、上記のf(x)やg(x)を出すのに、エクセルの近似式を使っていますが 限界を感じています。 カーブフィッティングや近似式を計算してくれるツール等があれば 併せてご教授くださいますようお願いいたします。 以上、よろしくお願いいたします。3

  • エクセルのIF関数とVLOOKUP関数について教えてください。

      A B C 1 A1 B1 C1 2 A2 B2 C2 ・ ・ ・ 上記のような表があり、セルX、Yに入力した値が2つの条件に合致した場合、セルZにC列の値を返すような数式を作っています。 たとえば、セルXの値がA1より小さく、かつ、セルYの値がB1より小さい場合にはセルZにC1の値を表示する、という数式を作りたいのです。 (ちなみにAn、Bn、Cnにはそれぞれ数字が入ります) =IF(AND(X<=A1,Y<=B1),C1,IF(AND(X<=A2,Y<=B2),C2,・・・ AND関数を利用してこのように数式を入れると、途中まではうまくいくのですが、引数が多いため途中からエラーが出てしまいます。 (引数の数は10個以上あります) IF関数とVLOOKUPを組み合わせればいいというところまではわかるのですが、どのように条件設定をすればいいのかがわかりません。 エクセル初心者で恐縮ですが、どなたか詳しい方いらっしゃいましたらご回答よろしくお願いいたします。

  • main関数以外での結果の表示?

    C言語で関数を用いたプログラムを作成しています。内容はA君、B君のボーリングの成績を入力し、その点数をランク付けするというものです。(250以上はS、200以上はA、150以上はB、100以上はC、50以上はD、50未満はFになります。) それから、このプログラムの条件は 1、main関数は値の入力と関数を呼び出すだけ。 2、関数の引数は入力した2つの値。 3、関数の中で結果を表示。 4、関数の戻り値はなし。 というもので、3番の結果のmain関数以外での結果の表示の仕方がわからず、どうやって結果を表示させていくのかよくわからず、行き詰っています。そのあたりの解説をしていただくとありがたいです。 なお、私が途中まで書いたので、問題点の指摘をおねがいいたします。 #include<stdio.h> int ia(int x); int ib(int y); int main(){  int a,b;  printf("A君のスコア");  scanf("%d",&a);  printf("B君のスコア");  scanf("%d",&b);  }  int ia(int x);  char ix;  if(x>=250){  ix = 'S';  }else if(x>=200 && x<250){  ix = 'A';  }else if(x>=150 && x<200){  ix = 'B';  }else if(x>=100 && x<150){  ix = 'C';  }else if(x>=50 && x<100){  ix = 'D';  else{  ix='F'; } int ib(int y);  char iy;  if(y>=250){  iy = 'S';  }else if(y>=200 && y<250){  iy = 'A';   }else if(y>=150 && y<200){  ix = 'B';  }else if(y>=100 && y<150){  iy = 'C';  }else if(y>=50 && y<100){  iy = 'D';  }else{  iy ='F'; }

  • γ関数のプログラム(初心者です)

    以下のようにγ関数のプログラムを組みました。 とりあえず整数値を入力すれば、正しい値は返しているということがprintfの4で確認できました。 もとはfortranで組んだプログラムをCに置き換えました。 ですが、実際走らせてみると、4で値は確認できますがsegmentation faultが出てしまいます。 ですからサブルーチンファイル(ユーザー関数?)として利用できません。 何がいけないのでしょうか? 正しくyが帰ってくるようにどうなおしたらよいのか教えてください。 #include <stdio.h> #include <math.h> double gamma(double x) { double c[8],y,a,r,b,s; int i; a=1.; r=1.; c[1]=5.771916e-01; c[2]=9.882058e-01; c[3]=8.970569e-01; c[4]=9.182068e-01; c[5]=7.567040e-01; c[6]=4.821993e-01; c[7]=1.935278e-01; c[8]=3.586834e-02; printf("0 %f\n",x); while(1){ if(x>2.){ x=x-1.; a=a*x; printf("1 %f %f\n",x,a); } else if(x<1.){ a=a/x; x=x+1.; printf("2 %f %f\n",x,a); } else{ break; } } x=x-1.; for(i=1;i<8;i++){ b=(double)(i); s=(c[i]*((double)(pow(-1,b))) *((double)(pow(x,b)))); printf("3 %d %f\n",i,c[i]); r=r+s; } y=a*(r+(0.03586834*((double)(pow(-1,8)))*((double)(pow(x,8))))); printf("4 %f\n",y); return y; } main() { double x,y; printf("数字を入力してください。"); scanf("%lf",&x); printf("メインプログラム %lf\n",x); y=gamma(x); printf("%f\n",y); }

  • 2次関数の問題です。

    A~J までは 0から(9)までの数字か,-符号が入ります。 ---------------------------------------------------- x の2次関数 y = a x^2 + bx + c (i)  を考える。 関数 (i) のグラフは (-1, -1) ,(2, 2) を通るものとする。 (1) b,c を a の式で表すと  b = [A] - a, c = [B C] a となる。 (2)関数 (i)のグラフと x 軸の交点のうち 1つは,0 < x =< 1 の範囲内にあるとする,このとき a の値の範囲は,               [D] < a = < [E] / [F] (ii) である。 (3) a の値が (ii) の範囲内を変化するとき, a + b c の値の範囲は [GH] / [I] =< a + bc =< [J] である。   ------------------------------------------------------------------------------- (1) (-1, -1), (2, 2)を通ることから a - b + c = -1 4a + 2b + c = 2 これを解くと,b = 1 - a , c = -2a がでます。 (2) y = f(x) とおいて,    f(0)×f(1) < 0 などと考えてみたのですが,うまくいきません。 (3) は (2)の範囲で, a+ bc = a + (1 - a)(-2a) の値の範囲を求めれば良いのではないかと思っています。 ------------------------------------------------------------------ 教えてください。

  • IF関数についてです

    エクセル初心者です。 わかりづらかったらすいません。 たとえば A1*B1の結果をF1へ。 C1+D1+E1の結果をG1へ。 で、F1+G1の結果をH1へ。 という表を作っています。 で、結果が0の時に空白を返したいので、それぞれを IF(A*B=0、””、A*B)として、 IF(C1+D1+E1=0、””、C1+D1+E1)としています。 最後にF1+G1の結果も0、もしくは空白の時に空白を 返したいのですがどのように数式を入れればよいのでしょうか。 自分なりにいれてみましたがエラーがでてしまいます。 よろしくお願いいたします。

  • 関数

    関数 y=f(x)とx=f(y)は関数として、等しいというのは合っていますか? また、(1)f(x)=e^x/(e^x+1)のときy=f(x)の逆関数y=g(x)を求めよ。 (2)(1)のf(x)、g(x)に対し、 (A)∫(a~b)f(x)dx+∫(f(a)~f(b))g(x)dx=bf(b)-af(a)をしめせ。 (解答) f(x)の値域は、0<y<1{(e^x)+1}y=e^x (1-y)e^x=y⇔x=log(y/1-y) xとyを入れ替えて、g(x)=log(x/1-x) (2)I=∫(f(a)~f(b))g(x)dxとする。 f(x)はg(x)の逆関数だから、y=g(x)より、x=f(y) dx=f‘(y)dy また、g(f(a))=a,g(f(b))=bとあるのですが、 これらは、y=g(x)とx=f(y)を合成したものだ、としても、本質的には、問題ないですよね

  • 数学の関数の問題です!

    絶対値を使って表される関数 f(x)=x/1-x/の質問です。 正の実数aに対し、0≦x≦aにおける関数y=f(x)の最大値1/4であるとき aの値の取り得る範囲は何か? 正の実数bに対し、0≦x≦bにおける関数y=f(x)の最大値がf(b)であるとき bの値の取り得る範囲は 何か? 正の実数cに対し、0≦x≦cにおける関数y=f(x)の最小値がf(c)であるとき cの値は 何か? 全くわかりません。 よろしくお願いしますm(_ _)m

専門家に質問してみよう