線を引いて動かす ② 滑らかに動かそうとして失敗
ある理由から唐突に、Excelで線を引いて、それを動かしたくなった。
前回は線を引いて、それを別の位置に動かすまでを行った。
infoment.hatenablog.com
今日は、もっと滑らかに動かしてみよう。
今回は、このように考えた。
一気に移動させるのではなく、任意の回数nで動かす。
その場合、一回の移動量は、x座標で言えば
(始点-終点)/n
となる。
それでは、こんな線を、
こんな風に動かしてみよう。
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) = 200: Ey(0) = 200 ' 線を描画。強引にWithで、一行の長さを抑えてみた。 Dim myLine As Shape With ActiveSheet.Shapes Set myLine = .AddConnector(msoConnectorStraight, _ Sx(0), Sy(0), _ Ex(0), Ey(0)) End With ' 移動後の座標設定。 Sx(1) = 200: Sy(1) = 0 Ex(1) = 0: Ey(1) = 200 ' 移動回数の設定。 Dim MovingTimes As Long MovingTimes = 30 ' 一回当たりの移動量(始点) Dim dSx As Double dSx = (Sx(1) - Sx(0)) / MovingTimes Dim dSy As Double dSy = (Sy(1) - Sy(0)) / MovingTimes ' 一回当たりの移動量(終点) Dim dEx As Double dEx = (Ex(1) - Ex(0)) / MovingTimes Dim dEy As Double dEy = (Ey(1) - Ey(0)) / MovingTimes Dim i As Long ' 設定した移動回数で変形。 For i = 1 To MovingTimes With myLine .Left = Sx(0) + dSx * i .Top = Sy(0) + dSy * i .Width = Ex(0) + dEx * i - .Left .Height = Ey(0) + dEy * i - .Top End With Application.Wait [Now() + "00:00:00.03"] Next End Sub
試した結果が、こちら。
・・・あれ?
ああ、そうか!
次回に続きます。
参考まで。