[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『IF分のネスト』(かずの子)
XP,Excel2003
始めまして、お知恵をお借りしたく、宜しくお願いします。
IF分のネストには制限がありますが、そのことで困っています。
あるセルに下記のような関数を書いています
=IF(AND($BN247="○○○",DATEDIF($BM248,$AC$1,"M")>=0),0,IF(VALUE(YEAR($AC$1)&MONTH($AC$1))=VALUE(YEAR($BM247)&MONTH($BM247)),$AA247,ROUND(IF(ISERROR(VLOOKUP($A247,データ!$A:$AJ,6,FALSE)<>0),IF(AND($BM247<>0,(YEAR($AC$1)-YEAR($BM247))*12+MONTH($AC$1)-MONTH($BM247)=1),VLOOKUP(YEAR($BM247)&MONTH($BM247),パターン!$A:$AG,22,FALSE)*($V247/12),IF(VALUE(YEAR($AC$1)&MONTH($AC$1))=VALUE(YEAR($BM247)&MONTH($BM247)),VLOOKUP(YEAR($BM247)&MONTH($BM247),パターン!$A:$AG,22,FALSE)*($V247/12),0)),INDEX(データ!M1:M300,SUMPRODUCT(MATCH($A246&"_"&$F246,データ!$A$1:$A245&"_"&データ!$AK$1:$AK245,0)))),0)))
やっていることは、簡単に言いますと条件によってパターンというシートからVLOOKUPで
値を拾ってくる、ということですが、
これにもう一つIFを加えたいのです。
なぜなら、最初のほうにあるDATEDIFが条件によってNUMエラーになるからです。
エラー回避のために使いたいんです。
ですが、上限に引っかかってしまいうまくいきません。どうすればよいか
どうか皆様のお知恵を拝借したくよろしくお願いします。
>>DATEDIF($BM248,$AC$1,"M")>=0
0以上なんだね・・・
条件いる?
(GobGob)
(GobGob)さんと重複しますが
>DATEDIFが条件によってNUMエラーになるからです 原因は DATEDIF($BM248,$AC$1,"M") で $BM248>$AC$1 の場合に起こります
>DATEDIF($BM248,$AC$1,"M")>=0 は $BM248<=$AC$1 だけでいいのではないでしょうか
>VALUE(YEAR($AC$1)&MONTH($AC$1))=VALUE(YEAR($BM247)&MONTH($BM247)) VALUE関数は必要ないのではないかな また TEXT($AC$1,"YYYYM")=TEXT($BM247,"YYYYM") でもいいかな
ちなみに 後段の >IF(VALUE(YEAR($AC$1)&MONTH($AC$1))=VALUE(YEAR($BM247)&MONTH($BM247)),VLOOKUP(YEAR($BM247)&MONTH($BM247),パターン!$A:$AG,22,FALSE)*($V247/12), 0) は 前段の条件と重複するので 0 になりませんか
新たに作成した式は:
=IF(AND($BN4="○○○",$AO$1>$BM4),0,ROUND(IF(AND($BM4<>0,TEXT($AO$1,"YYYYM")=TEXT($BM4,"YYYYM")),$AA4+VLOOKUP(YEAR($BM4)&MONTH($BM4),パターン!$A:$AG,26,FALSE)*($V4/12),IF(DATEDIF(DATE(YEAR($BM4),MONTH($BM4),DAY($AO$1)),$AO$1,"M")=1,VLOOKUP(YEAR($BM4)&MONTH($BM4),パターン!$A:$AG,26,FALSE)*($V4/12),IF(AND((YEAR($AO$1)-YEAR($D4))*12+MONTH($AO$1)-MONTH($D4)<4,$BM4=0),INDEX(データ!$U$1:$U$292,SUMPRODUCT(MATCH($A4&"_"&$F4,データ!$A$1:$A3&"_"&データ!$AK$1:$AK3,0))),0))),0))
これの中ほどに
IF(DATEDIF(DATE(YEAR($BM4),MONTH($BM4),DAY($AO$1)),$AO$1,"M")=1
とあります。
解説しますと、$AO$1、$BM4には2011/1/1等の日付が入っています。つまり$AO$1と$BM4の間に
何ヶ月の隔たりがあるか調べたいのです。単にDATEDIF($BM4,$AO$1,"M")とすると、例えば
$BM4の値が2011/12/31、$AO$1が2011/1/1だとすると、答えが"0"になってしまうので上記のような式にな
りました。月が変ったら一月たったと認識させたいからです。
ですが、エラー回避が面倒だし、ますます式が長くなるので出来ればDATEDIFは使いたくない。
何か良い方法はありませんでしょうか・・・
訳のわからない式を提示されて、何かいい方法がないかと問われても やりたいことがわかりませんので回答できませんね。
やりたいことがわかれば、全く別の回答になる場合もありますので・・・
ちなみに、 >例えば $BM4の値が2011/12/31、$AO$1が2011/1/1だとすると、 >答えが"0"になってしまうので上記のような式になりました。 >月が変ったら一月たったと認識させたいからです。 2010/12/31 の間違いかな? $BM4の値が2011/2/27、$AO$1が2011/3/30だとすると どうなりますか?
あと、ご指摘の通り、2011/12/31は2010/12/31の間違いです
$BM4の値が2011/2/27、$AO$1が2011/3/30だとすると どうなりますか?
1になりました。
こちらの質問の意味が、伝わっていないみたいですね
>$BM4の値が2011/2/27、$AO$1が2011/3/30だとすると どうなりますか? DATEDIF($BM4,$AO$1,"M")=1 DATEDIF(DATE(YEAR($BM4),MONTH($BM4),DAY($AO$1)),$AO$1,"M")=0 になりませんか?
>月が変ったら一月たったと認識させたいからです このことが、裏目に出ていませんか?
DATEDIF($BM4-DAY($BM4)+1,$AO$1-DAY($AO$1)+1,"M") こんなかんじでもいいかな
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.