和風スパゲティのレシピ

日本語でコーディングするExcelVBA

図形(Shape)を現在の位置基準で移動する - IncrementLeft/IncrementTop

図形(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派も存在だけは覚えておいてください。