【Excel VBA】複数の図形(シェイプ)の書式を一度にまとめて変更する方法

目次

はじめに

フローチャートや組織図など、Excelで多数の図形(シェイプ)を配置した資料を作成した後で、「やっぱりデザインを変えたい…」と思った経験はありませんか? 一つ一つの図形を選択して、色や枠線を変更していくのは非常に手間がかかる作業です。

しかし、VBAを使えば、複数の図形をグループとして扱い、定義済みのスタイルを一行のコードで一括適用することが可能になります。今回は、そのスマートな方法を解説します。


今回の主役:2つのキーポイント

このテクニックの鍵となるのは、以下の2つです。

  1. ShapeRange オブジェクト: 複数のシェイプを一つの集合(グループ)として扱うためのオブジェクトです。手作業でShiftキーを押しながら複数の図形を選択する操作の、VBA版だと考えてください。
  2. .ShapeStyle プロパティ: Excelの「図形の書式設定」タブにある「図形のスタイル」ギャラリーから、好きなスタイルを適用するためのプロパティです。塗りつぶしの色、枠線のスタイル、効果などがセットになった定義済みのデザインを簡単に利用できます。

実践コード:複数の図形にスタイルを一括適用する

事前準備

まず、VBAで操作するために、ワークシート上にいくつか図形を作成し、それぞれに固有の名前を付けておきましょう。

  1. 図形を挿入します(例:四角形、円、三角形)。
  2. 各図形を選択し、「図形の書式」タブの「オブジェクトの選択と表示」を開きます。
  3. 選択ウィンドウで、各図形に「Shape_A」「Shape_B」「Shape_C」といった名前を付けます。

VBAコード例

以下のコードは、上記で名前を付けた3つの図形をグループ化し、青系のスタイルを一括で適用するサンプルです。

Sub ApplyStyleToMultipleShapes()

    ' 複数のシェイプを扱うためのShapeRangeオブジェクトを宣言
    Dim shapeGroup As ShapeRange

    ' 3つの図形を名前で指定して、1つのグループにまとめる
    ' Array関数で、対象となるシェイプの名前を列挙する
    Set shapeGroup = ActiveSheet.Shapes.Range( _
        Array("Shape_A", "Shape_B", "Shape_C"))

    ' グループ化した図形全体に、定義済みのスタイルを適用する
    ' msoShapeStylePreset10 は、青系の塗りつぶしスタイルです
    shapeGroup.ShapeStyle = msoShapeStylePreset10

    ' オブジェクト変数を解放
    Set shapeGroup = Nothing

End Sub

コードの解説

  • Dim shapeGroup As ShapeRange 複数のシェイプを格納するための変数 shapeGroup を、ShapeRange型で宣言しています。
  • Set shapeGroup = ActiveSheet.Shapes.Range(Array(...)) Shapes.Range()メソッドを使い、複数のシェイpフを名前で指定しています。Array()の中に、対象としたいシェイプの名前をカンマ区切りで列挙することで、それらを一つのshapeGroupとしてまとめることができます。
  • shapeGroup.ShapeStyle = msoShapeStylePreset10 これがスタイルを適用する中心部分です。まとめたshapeGroupに対して.ShapeStyleプロパティを設定するだけで、グループ内のすべての図形に同じスタイルが一瞬で適用されます。

ヒント:使いたいスタイルの番号を見つけるには?

msoShapeStylePreset10のような定数の番号を、どうやって調べればよいのでしょうか? 一番簡単な方法は「マクロの記録」機能を使うことです。

  1. リボンの「開発」タブから「マクロの記録」を開始します。
  2. シート上の図形を一つ選択します。
  3. 「図形の書式」タブの「図形のスタイル」ギャラリーから、適用したいデザインをクリックします。
  4. 「マクロの記録」を終了します。
  5. Visual Basic Editor(VBE)を開き、記録されたマクロのコードを確認します。そこに、Selection.ShapeRange.ShapeStyle = msoShapeStylePresetXX のように、使いたいスタイルの定数名が記録されています。

まとめ

今回は、VBAを使って複数の図形の書式を一括で変更する効率的な方法を解説しました。

  • Shapes.Range(Array("名前1", "名前2")) を使って、複数の図形を ShapeRange オブジェクトにまとめる。
  • まとめたオブジェクトの .ShapeStyle プロパティに値を設定するだけで、スタイルを一括適用できる。
  • スタイルの定数番号は「マクロの記録」で簡単に調べられる。

この方法を使えば、資料のデザイン変更や、定型レポートの体裁を整える作業が劇的に速くなります。ぜひ、日々の業務に取り入れてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次