2007年12月15日土曜日

第66回目 図形編(その4) 図形の移動

○第66回目 図形編(その4) 図形の移動

 まずはお遊びです。
 一つの図形をカーソルのある場所に移動します。

Sub bb指定した一つの図形の移動()
'移動先のセルを指定してから実行
'図形の番号の事前確認が必要
 Dim z_no
 Dim AAA,AAA1,gyo1,retu1
 On Error Resume Next
'指定範囲の取得
 AAA = Selection.Address
'図形の移動
  z_no = Val(InputBox("図形の番号を入力してください。 ", "1"))
  ActiveSheet.Shapes(z_no).Left = Range(AAA).Left
  ActiveSheet.Shapes(z_no).Top = Range(AAA).Top
  Range(AAA).Select
End Sub

 かなめはお分かりでしょうか。
  ActiveSheet.Shapes(z_no).Left = Range(AAA).Left
  ActiveSheet.Shapes(z_no).Top = Range(AAA).Top
 の2行です。そしてこれを一般化すればいいことになります。

 これをある程度システム化しなればなりません。それが本当の問題となります。
 列番号で考えて、最後に列記号に変換するという流れとします。(行も考え方は同じです)
 前提がいっぱいあるのですが、その一つは、図形を表示したい場所のセルは列の幅、行の高さは一定とするということです。セルにあわせて図形を置くことになるので納得いくと思います。(セルの幅8.3、セルの高さ13.5としました)

 図形管理表を参照しながらお読みください。(端数の欄は気にしないでください)






【位置決めの手順】
 1.左上端の基準セルを決めます。例として27列の6行目(AA6)とします。
 2.一単位のセルの数を決め、基準のセルから何単位右に置くかを決めます。
 3.図形の列を考えた時、何セルごとに並べれば重ならないか、間隔が適当かを決めます。1単位4列としました。同様に行数も決めます。1単位8行としました。
 4.2の横に補助単位を入れます。これは基準単位の半分の列数とします。それに微調整としての数値を入れます。本単位を定めるの列、補助単位を定める列に数値(それぞれa1、a2とします)を入れます。
 5.すると最終的な列番号は、27+a1*4+a2*2 となります。行数も、6+8*b1+4*b2 となります。同じ列に並べたいものは同じ数値を入れてください。
 6.出来あがった列番号と行番号を用いて、A1形式の座標を作ります。列記号の変換の逆になりますので、列記号と列番号の対応を求める昔の記事を見てください(列記号と列番号の対応のために処理は、第26回参照)。
 (この際に、番号から列記号の変換機能を関数にしました。エクセルシート上でも参照可能です)。
 7.&関数で列記号と行番号をくっつけます。
 8.これを、図形番号の横にあいている場所に張り付けます。式で持っていってもかまいません。いらないところはヌル("")にしてください。
 9.図形番号と移動先セル座標を指定して、マクロを動かします。

 図形の番号と移動先のセルの番号がわかりましたので、一個のときと同じことを何回か繰り返せばいいことになります。
 列の位置、行の位置を決めるための位置単位の基準値は変更することがありますので外からあてがっておいてください。
 これは連続している任意の個数を動かすことが出来ます。もちろん1個でも可能です。

 マクロを動かすと面白いように意図したところに整列します。当たり前ですが…。
 でも最初に動いた時は、感動しました。こういう感動を大切にしましょう。

0 件のコメント: