【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以外のループ処理について紹介されています。
[blogcard url="https://mamemametochan.com/excel-5/"]
セル範囲内の図形のみ選択・移動する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の作り方が紹介されています。
[blogcard url="https://mamemametochan.com/excel-95/"]
図形の位置指定が活用された効率化マクロ
『図形の位置を指定するVBA』が応用された効率化マクロがこちら
- フォルダ内の写真をまとめて貼り付けるマクロ
- 「はい・いいえ」「Yes・No」に〇を付けるマクロ
実際に作業効率を飛躍的にアップさせることができた事例をご紹介します。
写真をまとめて貼り付けるマクロ
写真をまとめて貼り付けるマクロは、
フォルダ内の写真データを写真帖の様式に合わせて繰り返し貼り付ける
という処理をします。
写真を貼り付ける位置を指定するVBAコードに『図形の位置を指定するVBA』が使われている。
たとえば、
写真と写真の間を2行間隔で貼り付ける、ページが切り替わるとき1行間隔をあける、など
コードの設定でどんなパターンにでも対応可能です。
条件によってテキストに〇を付けるマクロ
テキストに〇を付けるマクロは、
クリックしたテキストに〇を付ける、チェックボックスのチェックを外すと該当する行の〇が削除される
という処理をします。
〇を付けるVBAコード、〇を削除するVBAコード、に『図形の位置を指定するVBA』が使われている。
他にも、
クリックするテキストの長さによって〇の大きさを変化させるVBA、指定範囲の〇だけを削除するVBA、条件によって〇の表示場所を変えるVBA、が導入されています。
VBA初心者が『図形を操作するVBA』を導入する方法
VBAなんて扱ったことないけど、『図形を操作するVBA』を導入したい!
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、
今では自分で効率化マクロをサクッと導入しちゃいます。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。
いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。
あなたに合った方法で導入しちゃいましょう。
マクロ開発を外注に依頼する
マクロ開発を外注に依頼する方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんな図形編集作業を自動化したい」「条件によって図形を移動させたい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。
ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。
疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、
すぐに使っているエクセルにマクロを導入することができます。
VBA初心者でも形になっているマクロをゲットできる、費用が安い、
というメリットがあります。
しかし、
想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要
というデメリットも。。。
ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『指定範囲の図形を削除するマクロ』『図形をまとめて移動させるマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。
ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい内容のコードを書くだけ
です。
【VBA 図形位置指定】【VBA 図形編集】でネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。