• ベストアンサー

excel 長いIF関数を短くする方法

エクセル2000にてIF関数を使った式を作っています。 A1セルに時間、A2には"緑?" そしてA3には数字(1~10)が入力されています。関数はA4に入ります。 =IF(AND(A1>=TIMEVALUE("8:00"),A1<TIMEVALUE("18:00")),IF(A2="緑",A3,IF(A2="緑1",0.5,IF(A2="緑2",1,IF(A2="緑3",1.5,IF(A2="緑4",2,IF(A2="緑5",2.5,0)))))),0) このように長いのですが、短くする方法はありますか? 朝8時から18時の間で、A2セル=緑ならA3、A2セル=緑1なら0.5・・・・と続きます。 この後も緑6のときは3、緑7は3.5ともう少し続けた式を加える予定もあります。 ご指導よろしくお願いします。

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

  • ベストアンサー
  • heinell
  • ベストアンサー率35% (420/1172)
回答No.1

vlookup使えば、IF(A2="緑1",0.5(…以下略)の部分は簡単にできるんではないかと思います。

mnhc33
質問者

お礼

VLOOKUP(A2="緑1",緑リスト,3,0)と名前の定義で範囲指定してみました。とてもうまくいっています。ありがとうございました。

mnhc33
質問者

補足

お答えありがとうございます。 A2に入力規則のリストが作ってあるので、これで簡単にいけそうです。 参考になりました。

その他の回答 (5)

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

NO3です。 >COUNTIF(A2,"緑*")はなぜ必要なのでしょうか? ⇒既にWendy02様にて回答済みですので参考まで。 ご例示では「緑?」以外は「0」とされていたので妥当性を判定したかった(私は入力条件を事前に判定する癖があります)為です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 #4の回答者です。 >COUNTIF(A2,"緑*")はなぜ必要なのでしょうか? =IF(COUNTIF(A2,"緑*"),IF(AND(A1>="8:00"*1,A1<"18:00"*1),IF(A2="緑",A3,SUBSTITUTE(A2,"緑","0")*0.5),0),"") この数式では、"緑"がないという条件を含めないと、エラーが発生してしまうからです。他に探してみましたが、見つからないので、それで、COUNTIF(A2,"緑*") を入れることにしました。また、A1>="8:00"*1 は、TimeValue関数を使わなくても良いです。#3さんの数式とは、同じCOUNTIF 関数の内容ですが、私の方は、エラー回避として用いています。 なお、IF(COUNTIF(A2,"緑*").. だけで、COUNTIF(A2,"緑*")>0 という意味になります。

mnhc33
質問者

お礼

詳しい説明ありがとうございます。 COUNTIF(・・・・の式は他にも色々と使えそうですね。 TimeValue関数を使わないだけでも式が短くなるので助かります。 大変参考になりました。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 支障がない限りは、元のままでもよいと思います。 以下は、「緑」の隣に、数字が入れてあれば、ずっと計算します。 =IF(COUNTIF(A2,"緑*"),IF(AND(A1>="8:00"*1,A1<"18:00"*1),IF(A2="緑",A3,SUBSTITUTE(A2,"緑","0")*0.5),0),"")

mnhc33
質問者

お礼

お答えありがとうございます。 文字列の操作でもできますね!参考になりました。 文字列操作はわかるのですが、 COUNTIF(A2,"緑*")はなぜ必要なのでしょうか? ちょっと難しくてこの式が理解できませんでした。

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

緑7まで対応していますが如何でしょうか。 =IF(AND(A1>=TIMEVALUE("8:00"),A1<TIMEVALUE("18:00"),COUNTIF(A2,"緑*")),IF(A2="緑",A3,IF(RIGHT(A2,1)*1<8,RIGHT(A2,1)*1*0.5,0)),0)

mnhc33
質問者

お礼

お答えありがとうございます。 文字列の操作でもできますね!参考になりました。 文字列操作はわかるのですが、 COUNTIF(A2,"緑*")はなぜ必要なのでしょうか? ちょっと難しくてこの式が理解できませんでした。

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

直接の回答ではありませんが、 =LOOKUP(B1,{"緑1","緑2","緑3";0.5,1,1.5}) =VALUE(MID(B1,2,1))*0.5 この2つの数式を試してみてください。

mnhc33
質問者

お礼

お答えありがとうございます。 普段VLOOKUPは良く使うのですが、LOOKUPは表がいらないので便利ですね。 MID関数とは!奥が深いです。 大変参考になりました。

関連するQ&A

専門家に質問してみよう