2011年7月15日金曜日

○第162回目 計算式のコピー。偏差を与える方式

○第162回目 計算式のコピー。偏差を与える方式


 計算式の複雑なコピー。複雑系計算式の作成をもっと簡単にしたものです。
 計算式の中の座標の一つずつに対して、列の偏差及び行の偏差を与えて計算式をコピーするという方式です。これにより、かなり複雑な計算式コピーができます。

 例えば、総和をとる行が一つずつ少なくなっていくSUM関数。
 範囲の最初の座標に対して、行番号を+1とし、他の座標に対しては、そのままとするように指示をするとできます。
 =sum(b5:b30)  b5の行番号のみを+1し、他は±0とする指示を与える。
 縦方向にコピーすると次の計算式がコピーされる。
 =sum(b6:b30)
 =sum(b7:b30)
 =sum(b8:b30)
   :
   :
 
 このマクロはかなり便利です。これまでの複雑系の計算式のコピー機能をかなりの質で凌駕しています。
 今までのものは一体なんだったのでしょうか?
 
縦のものを横に展開する。こんなのは簡単です。
 =b5 をもとに行番号のみを+1する。
 そして、横方向にコピーする。
 すると、
 =b5 =b6 =b7 =b8  …… となります。

 ここでの眼目は、計算式内の座標を正確に取得することです。
 これさえクリアできればほぼ完成です。この機能はすでに計算式の中の座標に飛ぶというマクロでカバーされています。
 計算式中の一つの座標がわかったとなりますと、次にそれを列記号と行番号にわけ、列記号を列番号に変換します。
 このひとつの座標ごとに縦偏差と横偏差を与えることになるので、列番号と行番号に加算し、列番号を列記号に変換すれば、新しい座標ができます。これを旧の座標に置き換えてやればいいことになります(置換え処理を使います)。
 これを座標の数だけ繰り返していけばいいことになります。計算式のコピーは複数個となりますので、偏差をその分だけ変化させていけばいいでしょう。

 問題が一つあります。それは旧の計算式の中を旧の座標を新の座標で置き換えていくわけですが、場合によっては、ある置換元の座標が、すでに置換わった新の座標に反応してしまうということです。これを避ける方法は難しいので、計算式を作ったと変な数値が出てきますので、それでチェックしてください。また、計算式のチェックで前後と違うということで見つけてください。
 例 すでにAH16と置換わっているものに対して、H16をI16に置き換えろということになると、AH16が反応してしまい、AI16に変わってしまいます。
 また、新の座標が、別の旧の座標と同じになってしまう場合は、さらに違う座標に置換わってしまいます。
 
 この調整は手作業となってしまうという問題点はあるのですが、この機能はかなり便利なものですからチャレンジして見てください。
 『第107回目 計算式で参照されている場所に飛ばすことができないか(その1)』あたりを参照してください。
 

0 件のコメント: