「excel vba shape セルに合わせて移動やサイズ変更をする」
「excel マクロ 図形 セルに合わせて移動やサイズ変更をする まとめて」
という検索で、このサイト『インストラクターのネタ帳』へのアクセスがありました。
Excelのワークシート上に作成した図形は、2013以降の場合[図形の書式設定]作業ウィンドウから、
2010・2007の場合[図形の書式設定]ダイアログから、
- セルに合わせて移動やサイズ変更をする
- セルに合わせて移動するがサイズ変更はしない
- セルに合わせて移動やサイズ変更をしない
といった設定ができます。
「excel vba shape セルに合わせて移動やサイズ変更をする」
「excel マクロ 図形 セルに合わせて移動やサイズ変更をする まとめて」
という検索キーワードは、この設定を行うExcelマクロ・VBAのコードを探している方によるものです。
全Shapeをセルに合わせて移動やサイズ変更するよう設定するサンプル
以下のマクロを実行すると、アクティブシート上のすべての図形が「セルに合わせて移動やサイズ変更をする」に設定されます。
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
shp.Placement = xlMoveAndSize
Next
End Sub
「セルに合わせて移動やサイズ変更をする」に設定変更する操作をマクロ記録すると、以下のようなコードが作られます。
Sub Test() Selection.Placement = xlMoveAndSize End Sub
このコードを参考にして、全Shapeにループを回して、
For Each shp In ActiveSheet.Shapes
各ShapeオブジェクトのPlacementプロパティをxlMoveAndSizeに設定するようにしたのが、
shp.Placement = xlMoveAndSize
上記のマクロです。
Shape.Placementプロパティに、定数xlMoveを指定すると「セルに合わせて移動するがサイズ変更はしない」に、定数xlFreeFloatingを指定すると「セルに合わせて移動やサイズ変更をしない」になります。
ループなしでセルに合わせて移動やサイズ変更をするよう設定するサンプル
ループ処理はExcelマクロに限らず、どんなプログラミング言語でも大切な概念ですから、Excelマクロを自分で作れるようになりたいという方は上記の、
For Each shp In ActiveSheet.Shapes
Next
というFor Each ~ Next文は是非使えるようになることをおすすめします。
ですが実は、全図形をセルに合わせて移動やサイズ変更をするように設定変更するには、ループ処理を行わなくてもできてしまいます。
ActiveSheet.Shapes.SelectAll
Selection.Placement = xlMoveAndSize
End Sub
Shapesコレクションオブジェクトには、SelectAllという(名前のとおり)全部を選択するメソッドが用意されています。
Shapes.SelectAllメソッドで全Shapeを選択しておいてから、マクロ記録で作られる、
Selection.Placement = xlMoveAndSize
というコードを実行すれば、全図形がセルに合わせて移動とサイズ変更するようになります。
ちなみに、この「Selection.Placement」は、隠しオブジェクトになっているDrawingObjectsコレクションのPlacementプロパティです。
最終更新日時:2021-12-19 06:00
Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjects » VBAで全図形をセルに合わせて移動やサイズ変更をするように