2009年9月6日日曜日

第128回目 計算式の分析;if文(その2)

○第128回目 計算式の分析;if文(その2)

 どこのカンマを本当のものと見極めるか。
 夢を見ました。大きな長細い皿の上に大小の皿が乗っかっています。皿の上に、また皿が乗っかっているものがあります。皿の中には豆粒の大きさのものがあります。二つほど入っています。よく見ると、一番下の皿に直接乗っかっている豆粒状のものは2つあります。他のものは上の皿に乗っていました。
 これです。皿はカッコと思えば、一番下の皿に直接乗っかっているものが求めるものになるのではないか、と思われます。
 これをマクロで書けばいいのです。
 ユーリイカ!
 というわけで、他の皿(カッコ)に乗っかっていないものを探します。
 カッコの始まりの位置と終わりの位置がわかりますので、その中に含まれているカンマかどうかがわかります。
 これで解決しました。
 あとはできるはずです。

=IF(lookup(xxx,xxx:xxx,xxx:xxx)>0.1,If(xxx>0.1,round(B23*1.234,2),lookup(xxx,xxx:xxx,xxx:xxx)),sumproduct(xxx:xxx,xxx:xxx))
 
 IF(の終わりの位置…4
 IF(文の後の)の位置…123
 IF(文の中の()1の位置…11と31
 IF(文の中の()2の位置…39と94
 IF(文の中の()3の位置…53と65
 IF(文の中の()4の位置…73と93
 IF(文の中の()5の位置…106と122
 カンマの位置…15,23,36,47,63,77,85,95,114
 これらの情報から、該当するカンマは36と95となります。
 この位置で切り分ければいいことになります。

 ということでこの問題は解決しました。

 なに、カッコのランク付けのやりかたがわからない?
 ○第126回目 計算式の分析;if関数(その前に)の後半をみてください。
 考え方は次のとおりです。
 1.最初の(を見つける。
 2.次の(を見つける。
 3.1以降の最初の)を見つける。
 4.1と2の間に3があるか。ある場合は、1と3が対応します。
 4-2.対応したら、3の位置の後から、1以下を繰り返えす。
 5.ない場合は、2のカッコを1とおき、2-4の操作をカッコがなくなるまで繰り返します。
 これによりランク1のカッコが見つかりますので、該当したカッコを別の記号に置き換えて、1に戻って1以下の処理をカッコがなくなるまで繰り返します。それぞれ5が終わった段階で、ひとつのレベルのもののカッコが決まっていきます。
 カッコの位置を探していくときに、前の部分を切り落として探していきますが、最終的には全体でみなければいけないので、全体の位置をも把握しながらということが、注意点でしょうか。
 

0 件のコメント: