2010年1月30日土曜日

第134回目 計算式の分析2

○第134回目 計算式の分析2

 第107回から113回あたりで計算式の分析と称して、主に計算式の中の項目別の値を取得して一覧表にするという機能を作りました。
 これに似たもので、画面に表示するものを作ってみたらどうかということです。
 複雑な計算式をチェックするの場合、その中の項目ごとの値が必要となります。それを任意に取って、画面に表示できないかというものです。記録としてまでは必要ないかも、というレベルを中心にします。もちろん後で利用可能なようにクリップボードには貼付けてください。でもこれはあくまでも、付加機能。
 
 具体的にどういうことかをもっと詳しくしましょう。
 このような計算式があったとします。
 =IF(M13<>0,ROUND(O77*(G13+0.5)*12*LOOKUP(INT(F13+G13+0.5),○○シート!$AU$7:$AU$63,○○シート!$AV$7:$AV$63)/1000,1),0)


 ここに区切り記号を入れて(これは手作業。入れる場所は任意)、
 =IF(【M13<>0】,ROUND(【O77】【*(G13+0.5)】*12*【LOOKUP(INT(F13+G13+0.5),○○シート!$AU$7:$AU$63,○○シート!$AV$7:$AV$63)】/1000,1),0)
それを分解し、
 =IF(
 【M13<>0】
 ,ROUND(
 【O77】
 【*(G13+0.5)】
 *12*
 【LOOKUP(INT(F13+G13+0.5),○○シート!$AU$7:$AU$63,○○シート!$AV$7:$AV$63)】
 /1000,1),0)
【 】で囲まれた部分の計算式の結果を表示する
、というものです。

 これは前回のユーザフォームのテキストボックスを使うとできます。
 テキストボックス内でコピーすれば、最後の部分を
 【INT(F13+G13+0.5)】
 【LOOKUP(INT(F13+G13+0.5),○○シート!$AU$7:$AU$63,○○シート!$AV$7:$AV$63)】
 /1000,1),0)
と、二重に記述することも可能です。
あわせて元の計算式も表示します。


(注)区切り記号は、入力しやすいものにするために、//とします。
  計算結果はすべての行について求めます。計算式の形式が整っていないのはエラーになりますので、そのときはブランク表示となります。

 このマクロは目新しいことはアイデアだけですので、マクロを組みことに関しては、今までのものをつぎはぎすれば大丈夫です。

 1.//を探し、計算式をその部分で分解する。//がなくなるまで繰り返す。最後は注意。
 2.計算結果を求める。
 計算結果は、使われそうもないセルに、分解した計算式を入れて求めます。計算式の形式を満たしていないものはエラーになりますので、エラーがおきたら、その計算結果はブランクだとしてください。
 3.表示内容を作成する。
 表示内容は、
  元の計算式と改行
  特別な区切り記号(**********)と改行
  分解したひとつずつごとに改行し、分解した部分と計算結果
 とします。
   例
    【INT(F13+G13+0.5)】 =⇒24
    【LOOKUP(INT(F13+G13+0.5),○○シート!$AU$7:$AU$63,○○シート!$AV$7:$AV$63)】
     /1000,1),0) =⇒0.253
 4.終了かどうかの入力
 処理は一回限りとしてもいいでしょうし、連続処理としてもいいと思います。
 連続処理とは、もう一度もとの計算式に戻り、区切り記号を入れていくというパターンと、これまで区切り記号を入れた結果を用いて、さらに区切り記号を入れていくというパターンとなります。戻る先が異なりますので注意してください。
 めんどくさいときは、最後のパターンのみとします。また最初からマクロを動かせば、一番目のパターンとなります。

 ※特別な区切り記号(**********)探し、その前後で区切ることになりますが、その際、その特別な区切り記号は10文字分ですが、その後に改行がありますので、12文字分あると思ってください。特別な区切り記号がある場所+13文字分から先が、これまでの処理結果となります。これを間違えると、不可解な改行が追加されていってしまいます(簡単なマクロなのですが、この点で引っかかってしまいました。一文字として認識していました)。

0 件のコメント: