図形 (描画オブジェクト) を操作する
図形または描画オブジェクトは、次の 3 つの異なるオブジェクトで表されます。
オブジェクト | 説明 |
---|---|
Shapes コレクション | を使用して図形を作成し、特定のワークシートのすべての図形を反復処理します。 |
ShapeRange コレクション | ユーザー インターフェイスで複数の図形を操作するのと同じ方法で、複数の図形を変更する場合に使用します。 |
Shape オブジェクト | 1 つの図形の書式を設定または変更する場合に使用します。 |
図形にプロパティを設定する
図形のほとんどの書式設定プロパティは、Shape または ShapeRange オブジェクトに直接適用されるプロパティでは設定されません。 その代わりに、関連する図形属性が、図形の塗りつぶしに関するすべてのプロパティを含む FillFormat オブジェクトや、リンクした OLE オブジェクトに固有のすべてのプロパティを含む LinkFormat オブジェクトなどの従属オブジェクトの下にグループ化されます。
図形のプロパティを設定するには、最初に関連する図形の属性のセットを表すオブジェクトを取得して、取得したオブジェクトのプロパティを設定する必要があります。 たとえば、Fill プロパティを使用して FillFormat オブジェクトを取得し、次に、FillFormat オブジェクトの ForeColor プロパティを設定し、次の使用例に示すように指定した図形の前景色に塗りつぶしを設定します。
Worksheets(1).Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)
同時に複数の図形にプロパティまたはメソッドを適用する
ユーザー インターフェイスでは、いくつかの図形を選択していくつかの操作を実行できます。たとえば、複数の図形を選択し、個々の塗りつぶしをすべて一度に設定できます。 1 つの図形のみを選択して、他の操作を実行できます。たとえば、1 つの図形が選択されている場合にのみ、図形内のテキストを編集できます。
Visual Basic では、図形セットにプロパティやメソッドを割り当てる方法が 2 つあります。 次の 2 つの方法を使用すると、画面上で同じ操作を実行できるかどうかに関係なく、図形範囲内の単一の図形でどのような処理でも実行できます。
画面上の複数の選択したオブジェクトに処理を行う場合は、処理する図形を含む ShapeRange コレクションを作成し、ShapeRange コレクションに適切なプロパティとメソッドを直接適用し、Visual Basic で同じ処理を実行できます。
画面上で選択した複数の図形に対して処理を実行できない場合は、処理する図形を含む Shapes コレクションまたは ShapeRange コレクションをループし、コレクション内のそれぞれの Shape オブジェクトに適切なプロパティやメソッドを適用して Visual Basic で処理を実行できます。
Shape オブジェクトおよび ShapeRange コレクションに適用されるほとんどのプロパティやメソッドは、特定の種類の図形によっては正しく動作しない場合があります。 たとえば、 TextFrame プロパティを、テキストを含むことができない図形に適用すると失敗します。
ShapeRange コレクション内の各図形に特定のプロパティまたはメソッドを適用できることを正に指定しない場合は、ShapeRange コレクションにプロパティまたはメソッドを適用しないでください。 これらのプロパティやメソッドのいずれかを図形のコレクションに適用する場合は、適用する前にそれぞれのコレクションをチェックし、それぞれの図形を調べて適切な図形であることを確認する必要があります。
シート上のすべての図形を含む ShapeRange コレクションを作成する
図形を選択し、 ShapeRange プロパティを使用して、選択した図形を含む ShapeRange コレクションを取得します。シートのすべての Shape オブジェクトを含む ShapeRange コレクションを作成できます。
Worksheets(1).Shapes.Select
Set sr = Selection.ShapeRange
Microsoft Excel では、Shapes コレクションの Range プロパティに対して Index 引数は省略可能ではないため、引数なしでこのプロパティを使用して Shapes コレクション内のすべての図形を含む ShapeRange オブジェクトを作成することはできません。
ShapeRange コレクションにプロパティまたはメソッドを適用する
画面上の選択した複数の図形に対して処理を同時に実行できる場合、ShapeRange コレクションを作成し、そのコレクションに適切なプロパティまたはメソッドを設定して、同等のプログラムを作成できます。 次の使用例は、 myDocument
に "Big Star" および "Little Star" という名前の図形を含む図形範囲を作成し、それらに塗りつぶしのグラデーションを設定します。
Set myDocument = Worksheets(1)
Set myRange = myDocument.Shapes.Range(Array("Big Star", _
"Little Star"))
myRange.Fill.PresetGradient _
msoGradientHorizontal, 1, msoGradientBrass
次に、プロパティやメソッドを ShapeRange コレクションに適用する場合の動作について一般的なガイドラインを示します。
コレクションにメソッドを適用することは、そのコレクション内の各 Shape オブジェクトにメソッドを適用することと同じです。
コレクションのプロパティ値を設定することは、その範囲の各図形のプロパティ値を設定することと同じです。
定数を取得するコレクションのプロパティは、コレクションのすべての図形がそのプロパティに対して同じ値を持つ場合は、コレクションの各図形のプロパティ値を取得します。 コレクションのすべての図形がそのプロパティに対して同じ値を持たない場合は、複数の値の異なる定数を取得します。
長整数型 (Long)、単精度浮動小数点型 (Single)、文字列型 (String) など、単一なデータ型を取得するコレクションのプロパティは、コレクションのすべての図形がそのプロパティに対して同じ値を持つ場合、各図形のプロパティ値を取得します。
プロパティの中には、コレクションに 1 つだけ図形がある場合のみ、値を取得または設定できるものがあります。 コレクションに複数の図形が含まれる場合は、実行時エラーが発生します。 この状況は、通常、画面から行う操作 (図形のテキストの編集、フリーフォームの頂点の編集など) が単一の図形でのみ実行可能な場合に、プロパティを取得または設定しようとすると発生します。
これらのガイドラインは FillFormat オブジェクトなど、ShapeRange コレクションの従属オブジェクトの下にグループ化される、図形のプロパティを設定する場合にも該当します。 従属オブジェクトが画面上の複数の選択したオブジェクトで実行できるオペレーションを表し、ShapeRange コレクションからオブジェクトを取得したり、プロパティを設定できます。
たとえば、 Fill プロパティを使用して、 ShapeRange コレクションのすべての図形の塗りつぶしを表す FillFormat オブジェクトを取得できます。 この FillFormat オブジェクトのプロパティを設定すると、ShapeRange コレクションの個別のすべての図形に同じプロパティが設定されます。
Shapes コレクションまたは ShapeRange コレクションをループする
複数の図形を選択し、画面上でそれらの図形に対して同時に処理を実行したり、コマンドを使用ができなくても、処理する図形を含む Shapes コレクションまたは ShapeRange コレクションでループを行い、コレクションの各 Shape オブジェクトにプロパティやメソッドを使用して、プログラム的に同等のアクションを実行できます。
次の使用例は、 myDocument
のすべての図形をループし、それぞれのオートシェイプ図形の前景色を設定します。
Set myDocument = Worksheets(1)
For Each sh In myDocument.Shapes
If sh.Type = msoAutoShape Then
sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
End If
Next
次の使用例は、作業中のウィンドウで現在選択されているすべての図形を含む ShapeRange コレクションを作成し、そのコレクションの各図形の前景色を設定します。
For Each sh in ActiveWindow.Selection.ShapeRange
sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
Next
ShapeRange での図形の配置、分散、およびグループ化
Align メソッドと Distribute メソッドを使用して、図形のセットを互いに相対的に配置するか、図形を含むドキュメントを基準に配置します。
複数の図形から単一のグループ化した図形を作成するには、 Group メソッドまたは Regroup メソッドを使用します。
関連項目
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示