【VBA】図形位置指定の完全攻略法!Top・Left使い方を3分で徹底解説
図形の編集作業を自動化したい!図形の位置を指定したい!!
こんな問題は、図形を操作するVBAで解決できます。
VBAで図形を思い通り操作できると、以下のような処理の自動化が可能
- クリックで図形の〇を表示・非表示できる
- 大量の写真をまとめて貼り付ける
- 指定する範囲だけの図形を移動・削除できる
めんどうな図形編集作業を一瞬で処理できるようになります。
図形を使った資料では、
「〇がちょっとズレて気に食わない」「大量の図形を移動させるのに時間がかかる」、など
ストレスを感じる要素がいっぱいですよね。
『図形の位置を指定するVBA』を導入すれば、こんなストレスを感じることは一切なくなります。
本記事では、
『図形の位置を指定するVBA』の使い方から応用方法まで
を詳しく解説。
図形を編集することが多い方は是非チェックしてみてください。
【VBA】図形の位置指定とは?基本概念を理解しよう
VBAで図形の位置を自由に操作できるようになると、Excelでの作業効率が格段に向上します。
図形の位置指定とは、
ワークシート上の任意の場所に図形を配置したり移動させたりする機能のこと
です。
この技術をマスターすることで、レポート作成や資料作成における図形の配置作業を自動化できるようになります。
図形(Shape)オブジェクトの位置プロパティ一覧
図形の位置を制御するためには、主要な位置プロパティを理解することが重要です。
VBAのShapeオブジェクトには位置を管理する専用のプロパティが用意されており、これらを使い分けることで柔軟な図形操作が可能になります。
最も基本的なプロパティは「Top」と「Left」で、これらはワークシートの左上を基準点とした絶対座標を表します。
また、
「IncrementTop」と「IncrementLeft」は現在位置からの相対移動に使用され、図形のサイズを表す「Width」と「Height」プロパティと組み合わせることで、より高度な位置計算が可能です。
TopプロパティとLeftプロパティの役割
「Topプロパティ」と「Leftプロパティ」は、図形位置指定の基本中の基本です。
Topプロパティ・・・図形の上端がワークシートの上端から何ピクセル離れているかを示す
Leftプロパティ・・・図形の左端がワークシートの左端から何ピクセル離れているかを示す
これらのプロパティを理解することで、図形を画面上の任意の場所に正確に配置できるようになります。
ActiveSheet.Shapes("図形1").Top = 100
上記のコードは、
図形1の上端をワークシートの上端から100ピクセル下に配置する
という意味です。
座標系とピクセル単位での位置指定方法
VBAにおける図形の座標系は、ワークシートの左上を原点(0,0)とするピクセル単位で管理されています。
(横方向は左から右へ、縦方向は上から下へと数値が増加)
ActiveSheet.Shapes("Rectangle 1").Left = 200
上記のコードは、
図形を左端から200ピクセルの位置に移動させる
という意味です。
また、セルの位置を基準にしたい場合は、Range(“A1").Leftのようにセルの座標を取得して、それを図形の位置プロパティに設定することも可能です。
VBA図形位置を指定する3つの基本メソッド
図形の位置を指定する方法は大きく分けて3つあります。
- 絶対位置指定
- 相対移動
- セル基準指定
この3つの手法を使い分けることで、あらゆる位置指定のニーズに対応できるようになります。
Top・Leftプロパティで絶対位置を指定する方法
絶対位置指定は、
ワークシートの左上を基準点として、ピクセル単位で正確な位置を指定する方法
です。
図形の現在位置に関係なく、常に同じ場所に配置
することができます。
ActiveSheet.Shapes("オートシェイプ 1").Top = 50
ActiveSheet.Shapes("オートシェイプ 1").Left = 100
上記のコードを実行すると、
図形は必ず上端から50ピクセル、左端から100ピクセルの位置に配置
されます。

ガッツポーズの人
IncrementTop・IncrementLeftで相対移動する方法
相対移動は、
図形の現在位置を基準として、指定した距離だけ移動させる方法
です。
図形の現在位置を気にすることなく、必要な分だけ移動できます。
IncrementTopプロパティは縦方向の移動に、IncrementLeftプロパティは横方向の移動に使用し、
正の値を指定すると右下方向に、負の値を指定すると左上方向に移動します。
ActiveSheet.Shapes("図形1").IncrementTop -20
ActiveSheet.Shapes("図形1").IncrementLeft 30
上記のコードをは、
図形1は現在位置から上に20ピクセル、右に30ピクセル移動する
という内容です。
セル範囲に基づいた位置指定テクニック
セル範囲を基準とした位置指定は、
表やデータとの関連性を保ちながら図形を配置する方法
です。
特定のセルの位置を取得して、それを図形の位置プロパティに適用します。
この方法の特徴は、
セル基準の位置指定により、データが変更されても図形の位置を自動的に調整できる
ことです。
Dim targetCell As Range
Set targetCell = Range("C5")
ActiveSheet.Shapes("グラフ1").Top = targetCell.Top
ActiveSheet.Shapes("グラフ1").Left = targetCell.Left
上記のようなコードにすると、
図形を常にC5セルの位置に配置する
ことができます。
VBA図形位置指定のサンプルコード集
実際のコードを動作させ、どのように図形が移動するのかを確認することで、より深く理解することができます。
ここからは、
実務でよく使われる図形位置指定のパターンをコピペできるサンプルコードを使って紹介
します。
実際にコードを動かして理解を深めてください。
単一図形の位置を変更するVBAコード例
単一図形の位置変更は、図形操作の基本中の基本です。
まず対象の図形を特定し、その位置プロパティを変更することで、図形を任意の場所に移動できます。
この操作をマスターすることで、より複雑な図形操作の基礎が身につきます。
Sub 単一図形位置変更()
Dim myShape As Shape
Set myShape = ActiveSheet.Shapes("図形 1")
' 絶対位置で指定
myShape.Top = 100
myShape.Left = 200
MsgBox "図形を座標(200, 100)に移動しました"
End Sub
上記のコードは、
図形オブジェクトを変数に格納し、TopとLeftプロパティを直接指定する
という内容です。
図形名が「図形 1」の場合、上端から100ピクセル、左端から200ピクセルの位置に移動させることができます。
複数図形を一括で位置変更するVBAコード例
複数の図形を効率的に操作するためには、ループ処理を活用することが重要です。
すべての図形に対して同じ操作を実行することで、作業時間を大幅に短縮可能。
特に多くの図形を扱うワークシートでは、このループ処理が威力を発揮します。
Sub 複数図形一括移動()
Dim myShape As Shape
Dim i As Integer
' すべての図形を右に50ピクセル、下に30ピクセル移動
For Each myShape In ActiveSheet.Shapes
myShape.IncrementLeft 50
myShape.IncrementTop 30
Next myShape
MsgBox ActiveSheet.Shapes.Count & "個の図形を移動しました"
End Sub
このコードでは、For Eachループを使用してワークシート上のすべての図形を順番に処理し、IncrementLeftとIncrementTopで相対移動させています。
関連記事「繰り返し処理(For~Nextと関数IF)の使い方)」では、For Each以外のループ処理について紹介されています。
セル範囲内の図形のみ選択・移動するVBAコード例
特定のセル範囲内にある図形だけを操作したい場合があります。
この高度なテクニックを使うことで、ワークシートの一部分だけを対象とした図形操作が可能になります。
範囲指定による図形の選別は、大きなワークシートで部分的な調整を行う際に非常に有効です。
Sub セル範囲内図形移動()
Dim myShape As Shape
Dim targetRange As Range
Set targetRange = Range("A1:D10")
For Each myShape In ActiveSheet.Shapes
' 図形がセル範囲内にあるかチェック
If myShape.Left >= targetRange.Left And _
myShape.Top >= targetRange.Top And _
myShape.Left <= targetRange.Left + targetRange.Width And _
myShape.Top <= targetRange.Top + targetRange.Height Then
' 範囲内の図形のみ移動
myShape.Left = targetRange.Left + targetRange.Width + 10
myShape.Top = targetRange.Top
End If
Next myShape
MsgBox "A1:D10範囲内の図形を移動しました"
End Sub
上記のコードは、
図形の座標とセル範囲の座標を比較して、範囲内にある図形だけを選別し、指定した位置に移動させる
という意味です。
関連記事「図形を削除するマクロの作り方」では、指定範囲内の図形を全て削除するVBAの作り方が紹介されています。
図形の位置指定が活用された効率化マクロ
『図形の位置を指定するVBA』が応用された効率化マクロがこちら
- フォルダ内の写真をまとめて貼り付けるマクロ
- 「はい・いいえ」「Yes・No」に〇を付けるマクロ
実際に作業効率を飛躍的にアップさせることができた事例をご紹介します。
写真をまとめて貼り付けるマクロ
写真をまとめて貼り付けるマクロは、
フォルダ内の写真データを写真帖の様式に合わせて繰り返し貼り付ける
という処理をします。
写真を貼り付ける位置を指定するVBAコードに『図形の位置を指定するVBA』が使われている。
たとえば、
写真と写真の間を2行間隔で貼り付ける、ページが切り替わるとき1行間隔をあける、など
コードの設定でどんなパターンにでも対応可能です。
条件によってテキストに〇を付けるマクロ
テキストに〇を付けるマクロは、
クリックしたテキストに〇を付ける、チェックボックスのチェックを外すと該当する行の〇が削除される
という処理をします。
〇を付けるVBAコード、〇を削除するVBAコード、に『図形の位置を指定するVBA』が使われている。
他にも、
クリックするテキストの長さによって〇の大きさを変化させるVBA、指定範囲の〇だけを削除するVBA、条件によって〇の表示場所を変えるVBA、が導入されています。
VBAでエクセル業務の効率化を実現
VBAを活用することで、エクセルでの日常業務を劇的に効率化できます。
VBAを使えば、
繰り返し作業の自動化によって人的ミスを削減し、作業時間を大幅に短縮する
ことが可能です。
毎日行っているデータ集計やレポート作成を自動化すれば、数時間かかっていた作業がボタン一つで数分で完了します。
エクセル作業が多い環境ではVBAの導入は必須事項である!といっても過言ではありません。
マクロを導入するメリット
マクロを導入する最大のメリットは、作業時間の短縮と品質の向上を同時に実現できることです。
人間が時間をかけて行う単純作業をコンピュータが正確かつ高速に処理することができます。
たとえば、手作業で1時間かかっていたデータ整理が、マクロなら数秒で完了し、さらに計算ミスや入力間違いも完全に防げます。
また、一度作成したマクロは何度でも使い回せるため、長期的な業務効率化投資としても非常に価値があります。
結果として、マクロ導入は時間コストの削減と業務品質の向上という二重のメリットをもたらします。
VBA学習の始め方
VBA学習の最も効果的な始め方は、実際の業務課題から出発することです。
目的が明確な学習は記憶定着率が高く、モチベーションも維持しやすいのは間違いありません。
たとえば、毎週行っているデータ集計作業を自動化することを目標に設定し、必要な機能から順番に覚えていけば実践的なスキルがすぐに身につきます。
基本的な変数の使い方から始まり、ループ処理、条件分岐、配列など、段階的にレベルアップしていくことで、確実にVBAをマスターできます。
関連記事「VBA初心者必見!マクロの作り方」では、コードを書く画面の開き方や書いたコードの実行方法が図やサンプルコードを使って紹介されています。
マクロの開発を外注依頼する
業務内容に合わせた効率化マクロを導入したいけど、VBAコードを開発する時間がない。。。どうやってプログラムを組めばいいかわからない。。。
このような方は、マクロ開発を外注に依頼しちゃいましょう。
外注依頼することで本業に集中しながら高品質なマクロを即座に導入することができます。
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
効率化マクロを導入してエクセル業務の効率をアップさせましょう。