○第79回目 図形作成システムの完成度を求めて(その2)
図形の位置、1セル以下の端数も考慮する。
前回の機能でもまだ表現できないところがあります。それはセル単位以下の位置です。
ある程度のアバウトでもともってはじめたのですが、ここまでくるとこの点に対処しないことの穴が気になって仕方ありません。
ということで、今回は位置のセル以下の端数値をフィードバックするという点を取り上げます。
原理的には、前回で情報は十分整っていますので、今回はその加工となります。
図形の位置=⇒セル単位に換算する=⇒実際の位置とセル単位での位置との差を求める=⇒それらを図形作成管理表に書き込む。
図形作成管理表はそこまで考えられていませんので、列を挿入します。
図形を動かすもととなる位置情報のとなりに、列での端数と行での端数の欄を設けます。また、列と行の位置を作り上げるエリアにもニ項目を追加します。同じものですので、マクロでは後者のエリアに書き込み、後者のエリアから計算式で前者のエリアに移します。図形の位置を動かす際は、この三つの情報をもとにします。
三つの情報とは、A1形式でのセル座標、列の端数値(前者のものです)、行の端数値(前者のものです)の三つです。
変更後の図形関係のパラメータ設置エリア(いわゆる『図形作成管理表』)の構成
---------------------------------------------------------------------------
C;図形番号……エクセルで振っている図形番号
D;位 置………A1座標による図形の位置(k列とイコール)
E;列_端数 ……A1座標では表せない1セル以下の図形の横幅の端数値(Q列とイコール)
F;行_端数 ……図形のA1座標では表せない1セル以下の図形の高さの端数値(V列とイコール)
G;テキスト……図形内のテキスト
H;図形形式……エクセルでもっている図形の名前
I; ……空き
---------------------------------------------------------------------------
J;図形番号……C;図形番号と同じ
K;位 置………A1座標による図形の位置(PとUをあわせたもの)
---------------------------------------------------------------------------
L;列 ………列番号による図形の基準位置
M; 4 ………列番号による図形の調整値1。1単位で4列を示す欄
N; 2 ………列番号による図形の調整値2。1単位で2列を示す欄
O;横位置………列番号による図形の位置(L+M*4+N*2)
P; ………列記号による図形の位置
Q;端数 ………A1座標では表せない1セル以下の図形の横幅の端数値(マクロで書込む)
---------------------------------------------------------------------------
R;行 ………行番号による図形の基準位置
S; 6 ………行番号番号による図形の調整値1。1単位で6行を示す欄
T; 3 ………行番号番号による図形の調整値2。1単位で3行を示す欄
U;縦位置………列番号による図形の位置(R+S*6+T*3)
V;端数 ………A1座標では表せない1セル以下の図形の高さの端数値(マクロで書込む)
---------------------------------------------------------------------------
W;コネクタ_元図形…コネクタの元となる図形の番号
X;先図形 …コネクタの先となる図形の番号
Y;場所元 …コネクタの元となる図形にコネクタをつける位置
Z;場所先 …コネクタの先となる図形にコネクタをつける位置
使い方は、
手作業で図形を動かした時=⇒マクロの"図形の位置情報の取得"を動かし、図形作成管理表に図形の位置情報を書き込みます。
端数値を指定して図形を動かしたい時=⇒おおよその端数値を入れて、マクロの"図形の移動_場所を指定する"を動かし、図形を移動させます。端数値は、換算すると1列は54、1行は13.5なので、それを目安にだいたいのところを入れてください。
Q;微調整するには、手作業で図形を直接動かせばいいのではないのでしょうか。そうすれば、位置の取得だけ必要で、"端数値を指定して図形を動かす"ことは不要ではないでしょうか。
=⇒複数の図形を同じだけ動かすとか、図形を違う方向にいっぺんに動かしたいとかいう場合には、有益だと思います。いろいろ試した結果からは、双方向必要だという感じを持っています。
ここで問題が浮上してきます。手作業で図形を動かすとき、グループ化してから動かしたほうがいい場合があります。現時点の図形作成システムにはグループ化の機能がないことです。グループ化すと図形番号がどうなってしまうのか、いろいろと研究すべき点があると思いますが、前向きに取り組んでいきたいと思います。
続きです。
気をつけなければいけないのは、図形作成管理表のレイアウトが変わったということです。
今まで図形作成管理表に数値等を貼り付けていたマクロを点検し、修正しなければなりません。
それほど多くのマクロが対象にはならないので、一つずつ修正してください。出来るだけ簡単に修正するには、どのようなマクロにしておけばいいのかを考えるいい機会だと思います。
本論に戻ります。
実際の座標は
xx_pos(i) = ActiveSheet.Shapes(i).Left
yy_pos(i) = ActiveSheet.Shapes(i).Top
となっています。
A1座標に変換した座標は
xx_A1(i) = Int((xx_pos(i) - xx_pos(1)) / (ll838 * ll644) + lc026 + 0.5)
yy_A1(i) = Int((yy_pos(i) - yy_pos(1)) / (ll135) + lr005 + 0.5)
となっています。
ここで落とされた端数値を求めればいいことになります。
ここではすべてアンカー図形からの値が意味を持ちますので、注意してください。
xx_A1(i) - lc026 がアンカー図形からの列の偏差(セル単位)
yy_A1(i) - lr005 がアンカー図形からの行の偏差(セル単位)
↓
(xx_A1(i) - lc026)*(ll838 * ll644) がアンカー図形からの横の偏差(実距離)
(yy_A1(i) - lr005)*ll135 がアンカー図形からの縦の偏差(実距離)
↓
(xx_pos(i) - xx_pos(1)) - (xx_A1(i) - lc026)*(ll838 * ll644) が端数値
(yy_pos(i) - yy_pos(1)) - (yy_A1(i) - lr005)*ll135 が端数値
※0.25刻みの端数処理もあわせてしてください。(4倍して四捨五入して整数値を求め、それを4で割る)=⇒これをしなくても大丈夫そうでした。
これを、図形作成管理表の該当する列に書き込めばよいことになります。
列の端数値はQ、17列
行の端数値はV、22列 となります。
※位置情報のエリアにかかる定数として、lc012とlc018が定義されていますので、lc012+5とlc018+4を使ってセルに書き込んでください。
端数を算出した以降のマクロを見てみると
'端数の算出
x_hasuu(i) = (xx_pos(i) - xx_pos(1)) - (xx_A1(i) - lc033) * (ll838 * ll644)
y_hasuu(i) = (yy_pos(i) - yy_pos(1)) - (yy_A1(i) - lr005) * ll135
'書き込み
'列情報
Cells(lr005 + i, lc012 + 1) = (xx_A1(i) - Cells(lr005 + i, lc012)) / Cells(lr005, lc012 + 1)
Cells(lr005 + i, lc012 + 2) = ClearContents
Cells(lr005 + i, lc012 + 5) = x_hasuu(i)
'行情報
Cells(lr005 + i, lc018 + 1) = (yy_A1(i) - Cells(lr005 + i, lc018)) / Cells(lr005, lc018 + 1)
Cells(lr005 + i, lc018 + 2) = ClearContents
Cells(lr005 + i, lc018 + 4) = y_hasuu(i)
※今回は、本題はそれほど難しくありませんが、図形作成管理表のレイアウトが変わったことで他のマクロに影響があります。その修正のほうが作業量としては大きいです。
出来るだけ修正が簡単になるようにマクロを組むように気をつけましょう。

0 件のコメント:
コメントを投稿