[[20110906143349]] 『IF分のネスト』(かずの子) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 になりませんか

(かずの子)
お二人様、ありがとうございます。
試してみます。出来ましたら、報告いたします。
取り急ぎ、御礼まで

(かずの子)大変遅くなり申し訳ありませんでした。お2人のコメントを頂き、式がおかしいことに気付いて直すのに悪戦苦闘し、遅くなりました。式を直しました。

新たに作成した式は:

=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.