図形(Shape)を今の位置基準で移動する方法を解説します。
現在位置から横方向・縦方向に少しだけ移動するには、
ShapeオブジェクトのTop/Leftに現在位置+移動距離を代入します。
IncrementLeft・IncrementTopメソッドを使用する方法もあります。
基本構文
対象Shape.Left = 対象Shape.Left + 横方向の移動量(単位:ポイント) 対象Shape.Top = 対象Shape.Top + 縦方向の移動量(単位:ポイント) ' または 対象Shape.IncrementLeft 横方向の移動量(単位:ポイント) 対象Shape.IncrementTop 縦方向の移動量(単位:ポイント)
サンプルコード
Sub 図形を今の位置基準で移動する() Dim 対象図形 As Shape Set 対象図形 = ActiveSheet.Shapes("TextBox 1") ' 右へ50pt移動 対象図形.Left = 対象図形.Left + 50 ' 左へ20pt移動 対象図形.Left = 対象図形.Left - 20 ' 下へ30pt移動 対象図形.Top = 対象図形.Top + 30 ' 上へ10pt移動 対象図形.Top = 対象図形.Top - 10 ' IncrementLeft・IncrementTopで移動 対象図形.IncrementLeft 50 対象図形.IncrementLeft -20 対象図形.IncrementTop 30 対象図形.IncrementTop -10 ' セル1つ分だけ右下へ移動 Dim 基準セル As Range Set 基準セル = ActiveSheet.Range("C3") 対象図形.Left = 対象図形.Left + 基準セル.Width 対象図形.Top = 対象図形.Top + 基準セル.Height End Sub
解説
図形(Shape)を今の位置から移動するには、
Top・Leftプロパティに移動量を足した値を代入します。
対象図形.Left = 対象図形.Left + 50
また、同じことをIncrementLeft・IncrementTopメソッドで書くこともできます。
対象図形.IncrementLeft 50
Left/Topはプロパティのため代入コードになっており、
IncrementLeft/Topはメソッドのためメソッド実行コードになっています。
特にIncrementLeft/Topに「=」を書いてしまうとエラーになるためご注意下さい。
対象図形.IncrementLeft = 50 ' ← これはエラー
また、どちらもマイナスの値を使うことで左・上方向の移動ができますが、
左端・上端を超えた場合は「Top/Leftだけがエラー」になります。
対象図形.Left = 対象図形.Left - 10000 ' ← 計算結果がマイナス、つまりA列より左になったエラー 対象図形.IncrementTop -10000 ' ← マイナスでもエラーにならず、A列ピッタリ左寄せで止まる
両者の使い分けですが、どちらも結果は同じになるため、
好きな方を使っておけばOKです。
ゲームでも実装しない限り、実行速度にもほとんど差はありません。
(もちろん厳密には参照と代入を2回やっているTop/Leftの方が極小時間遅いです)
右上移動時にエラーになってほしいか(A列・1行でピッタリ止まってほしいか)に違いがなければ、読みやすい方を使っておけばいいと思います。
一応、マクロ記録で矢印キーを使うとIncrement系が記録されますので、
Top/Left派も存在だけは覚えておいてください。