- ベストアンサー
ifの複数条件で
エクセルを何とか使ってるくらいのものです。 A列に、数字のデータが入っており、B列に、 A列をみて、1~5ならA、6~10ならBというように 表示させる関数を入れたいのです。 条件は全部で13あるのですが、一度に指定できますか? 良く考えれば分かりそうなのですが、 今は考える時間がありません。 よろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
#2のご回答をお勧めします。 ただし次の点注意が必要です。 (1)表範囲を式で示す時$をつけること。 =VLOOKUP(A1,$G$1:$H$13,2,TRUE) $がないとおかしな結果になります。 (2)TRUE型を使うこと。即ち第4引数はTRUEです。 #2では省略されています。 (3)TRUE型を使う時は、照合列(G列)の値は昇順(降順は不可)に並べておくこと。 (4)照合列は、本件では 1 a 6 b 11 c 16 d 21 e ・・・ とするが、一致する値がないときは検査値より小さい値の 最大値が取られる。 A1が16の場合は表に16があるのでその列のD、 A1が13なら13より小さい値の、表上の1,6、11の うち一番大きい11をとってその行のcを返す。 境界に持って来る(表を作る)値には注意しましょう。 こう言う理屈です。
その他の回答 (7)
- abcdef1234567890
- ベストアンサー率19% (7/36)
#3さんの式は良いですね。 ところで、もし、強引にネスとするなら =IF(A1<31,IF(A1<11,IF(A1<6,IF(A1<1,"","A"),"B"),IF(A1<21,IF(A1<16,"C","D"),IF(A1<21,"E","F"))),IF(A1<51,IF(A1<41,IF(A1<36,"G","H"),IF(A1<46,"I","J")),IF(A1<61,IF(A1<56,"K","L"),IF(A1<66,"M","")))) の方がネスト数が少なくなります。まだ、最大で4つですね。でも、見にくいことには違いありません。 ちなみに、必ずしも5区切りじゃないときのために#2さんの補足をしておくと =VLOOKUP(A1,G1:H13,2) の G1:H13 は絶対参照 $G$1:$H$13 にしておく必要があります。これは F4 キーで簡単に切り替えできます。
- notnot
- ベストアンサー率47% (4900/10358)
シート上の使われていないエリア、または他のシートに 1 A 6 B 11 C .. .. のように範囲の下限値と対応文字を13行入力します。 仮に、H1からH13に下限値、対応文字をI1~I13に入力したとすると、B1セルに、=LOOKUP(A1,$H$1:$H$13,$I$1:$I:13) と入力して、B2以降はドラッグコピーすればOKです。対応表が変わってもそこだけ修正すればいいので楽です。 別シートsheet2のA列B列を使った場合は、 =LOOKUP(A1,Sheet2!$A$1:$A$13,Sheet2!$B$1:$B$13) などとします。
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 ちょっと訂正。2行目を、 IF(A1>=35,IF(A1>=61,"M",IF(A1>=56,"L", ↓ IF(A1>35,IF(A1>=61,"M",IF(A1>=56,"L",
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 #2さんや#3さんの回答の方が現実的でしょうけど、ネスト制限を超えるサンプルです。 下記の関数をコピーして、B1を選択してから数式バーに貼り付けます。 (改行があっても大丈夫です) A1が空白以外で1以上65以下の場合に、5刻みでA~Mを表示します。 =IF(OR(A1="",A1<1,A1>65),"", IF(A1>=35,IF(A1>=61,"M",IF(A1>=56,"L", IF(A1>=51,"K",IF(A1>=46,"J",IF(A1>=41,"I", IF(A1>=36,"H","")))))), IF(A1>=31,"G",IF(A1>=26,"F",IF(A1>=21,"E", IF(A1>=16,"D",IF(A1>=11,"C", IF(A1>=6,"B","A"))))))))
- pppc88
- ベストアンサー率43% (40/93)
単純ですが例えば CHAR(INT((A1-1)/5)+65) と書くと、セルA1が1~5は"A"、6~10は"B"…を返すようになります。 ご投稿の例のように5あがることにで"A"、"B"…で"M"までという規則でしたら、IF文で、A1が13の条件共通の範囲かどうかチェックしてよければ上の式の値、ダメなら例えば""を返すようにします。 例です。 =IF(AND(A1>0,A1<66),CHAR(INT((A1-1)/5)+65),"")
- s_yoshi_6
- ベストアンサー率73% (1113/1519)
Excelでは重ねることのできるIF関数の数は最大7つまでですので、13の条件分けをする場合は他の方法でやらなければなりません。 1つのセルで条件まで入れた関数を書くと長くなりそうなので、条件式を別表で作って、VLOOKUP関数でそれを参照するようにされてはいかがでしょうか。 例えばG1:H13に条件式が 1 A 6 B 11 C 16 D 21 E 26 F 31 G 36 H 41 I 46 J 51 K 56 L 61 M と入っているとして A列に適当な数値、B1に=VLOOKUP(A1,G1:H13,2)と入れて以下コピーでよいかと思います。
- papayuka
- ベストアンサー率45% (1388/3066)
> 全部で13あるのですが、一度に指定できますか? 基本的にIFのネストは7回です。 ただ、式は長くなるけど工夫すると超える事も可能です。 例えば、条件の半分くらいの位置で一旦判定し、True なら7回ネスト、Falseなら6回ネストで判定を出すとか。
お礼
みなさんありがとうございました。 仕事してる予定が、所用があって帰ってきてしまいましたので、やってみてはないのですが、皆さんに 教えていただいた方法でやってみようと思います。 かなり勉強が必要です。私には(^_^;) まとめてお礼させていただきました。