線を引いて動かす ① とりあえず線を引く
ある理由から唐突に、Excelで線を引いて、それを動かしたくなった。
ちゃんとゴールできるか分からないが、挑戦してみよう。
手始めにオートシェイプの線を引いて、それをマクロの記録で見てみた。
なるほど、こんな感じか。
- 現在編集可能なシートに、図形としてコネクタを追加する。
- コネクタのタイプは直線(msoConnectorStraight)。
- 後半4つの数字は、始点と終点の各縦横座標。
扱い易さのために、一旦変数にセットしてみよう。
こんな時はいつも、適当な変数にセットしたうえで、型を確認している。
Sub Macro2() Dim a Set a = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 248.25, 74.25, 525.75, _ 294) Debug.Print TypeName(a) End Sub
型は、Shapeだった。言われてみれば、そりゃそうだ。
ということで、こんな風に書き直してみた。
Sub test() ' 始点のx,y座標。 Dim sx As Double Dim sy As Double ' 終点のx,y座標 Dim ex As Double Dim ey As Double ' 初期値設定(てきとー)。 sx = 0: sy = 0 ex = 100: ey = 100 ' 線を描画。強引にWithで、一行の長さを抑えてみた。 Dim myLine As Shape With ActiveSheet.Shapes Set myLine = .AddConnector(msoConnectorStraight, _ sx, sy, _ ex, ey) End With End Sub
実行した結果が、↓ こちら。
よし、ここまでは順調だ。
次に、移動後の始点と終点を指定しようとして、気付いた。終点って、どうやって与えれば良いんだろう?
始点はそれらしきものがあるが、終点が見当たらない。
無いものは、仕方ない。でも、始点と終点で指定したい。
ということで、最終的に線の幅と高さを求めることにした。
- 終点のx座標=始点のx座標+幅
- 終点のy座標=始点のy座標+高さ
以上を踏まえて、このように書き直し。
Sub test() ' 始点のx,y座標。 Dim sx(1) As Double Dim sy(1) As Double ' 終点のx,y座標 Dim ex(1) As Double Dim ey(1) As Double ' 初期値設定(てきとー)。 sx(0) = 0: sy(0) = 0 ex(0) = 100: ey(0) = 100 ' 線を描画。強引にWithで、一行の長さを抑えてみた。 Dim myLine As Shape With ActiveSheet.Shapes Set myLine = .AddConnector(msoConnectorStraight, _ sx(0), sy(0), _ ex(0), ey(0)) End With ' 移動後の座標設定。 sx(1) = 10: sy(1) = 20 ex(1) = 90: ey(1) = 70 ' 移動(というより、むしろ変形か)。 With myLine .Left = sx(1) .Top = sy(1) .Width = ex(1) - .Left .Height = ey(1) - .Top End With End Sub
ステップ実行した結果がこちら。
初日としては、こんなものかな。
次回に続きます。
参考まで。