ExcelマクロVBA入門 | 第97回.図形(Shape) | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2018-02-10

第97回.図形(Shape)


VBAで、オートシェイプを扱う場合の解説です、

オートシェイプは、Shapeオブジェクトになります。

Shapeオブジェクトのコレクションが、Shapesコレクションになります。



図形(Shape)関連のオブジェクト群

Shapesコレクション ・・・ Shapeオブジェクトのコレクション
Shapeオブジェクト ・・・ オートシェイプ、フリーフォーム、OLE オブジェクト、またはピクチャなど、描画レイヤーのオブジェクトを表します。
ShapeRangeオブジェクト ・・・ 文書の図形セットである図形範囲を表します。
GroupShapes オブジェクト ・・・ グループ化した図形を表します。

さらに、Shapeオブジェクトのプロパティで取得できる下位のオブジェクトとして、

FillFormatオブジェクト ・・・ 図形の塗りつぶしの書式設定を表します。
LineFormatオブジェクト ・・・ 線と矢印の両端の書式を表します。
TextFrameオブジェクト ・・・ レイアウト枠を表します。
TextFrame2オブジェクト ・・・ 2007から追加されたTextFrameの後継オブジェクト。

これらのコレクション、オブジェクトに、それぞれのプロパティとメソッドがあります。

図形(Shape)関連のプロパティ、メソッド一覧

上の一覧をご覧いただければわかりますが、非常に多くのプロパティがありますので、とても全てを把握する事は困難です。
そして、決してこれで全てではありません、下位のオブジェクは他にもたくさんあります。

変更したいプロパティやメソッドのみ、都度調べれば良いでしょう。
プロパティの設定値やメソッドの引数について知りたい場合は、
マクロの記録で自動記録されたVBAコードを参考にするのが最も早く簡単です。
※ただし、Excel2007を使っている場合は、正しく記録されません。

上記の一覧は、
マクロの記録で作成されるVBAコードを読む時の参考にしてください。



図形の追加

図形をワークシートに追加する場合は、

ShapesコレクションのAddShapeメソッドを使います。

Shapesコレクション.AddSahpeメソッド
ワークシートの新しいオートシェイプを表す Shape オブジェクトを返します。

Shapesオブジェクト.AddShape(Type, Left, Top, Width, Height)

名前 必須/オプション データ型 説明
Type 必須 MsoAutoShapeType 作成するオートシェイプの種類を指定します。
MsoAutoShapeType列挙体で指定します。
Left 必須 単精度浮動小数点型 (Single) 文書の左上隅を基準に、オートシェイプの境界ボックスの左上隅となる位置をポイント単位で指定します。
Top 必須 単精度浮動小数点型 (Single) 文書の左上隅を基準に、オートシェイプの境界ボックスの左上隅となる位置をポイント単位で指定します。
Width 必須 単精度浮動小数点型 (Single) オートシェイプの境界ボックスの幅をポイント単位で指定します。
Height 必須 単精度浮動小数点型 (Single) オートシェイプの境界ボックスの高さをポイント単位で指定します。

戻り値は、追加されたShapeオブジェクトです。

使用例
ActiveSheet.Shapes.AddShape(msoShapeRightArrow, 0, 0, 100, 50)

右向きのブロック矢印を挿入(幅100、高さ50)しています。



図形の削除

図形を削除する場合は、ShapeオブジェクトのDeleteメソッドを使います。

Shapeオブジェクト.Delete



図形の編集

図形を編集する場合は、Shapeオブジェクトのプロパティ値の変更、
もしくは、
Shapeオブジェクトのプロパティで取得される下位のオブジェクトを操作することで行います。

Shapeオブジェクトのプロパティ値の変更
Shapeオブジェクト.Top = Range("B2").Top
Shapeオブジェクト.Left = Range("B2").Left


B2セルの位置に図形を移動しています。

Shapeオブジェクトのプロパティで取得される下位のオブジェクトの操作
FillFormatオブジェクト ・・・ 図形の塗りつぶしの書式設定を表します。
LineFormatオブジェクト ・・・ 線と矢印の両端の書式を表します。
TextFrameオブジェクト ・・・ レイアウト枠を表します。
TextFrame2オブジェクト ・・・ 2007から追加されたTextFrameの後継オブジェクト。

Shapeオブジェクト.Fill.ForeColor.RGB = RGB(0, 176, 80)
Shapeオブジェクト.Line.ForeColor.RGB = vbRed


緑で塗りつぶし、枠の色を赤にしています。



Shapeオブジェクトの中に、さらにオブジェクトが含まれています。
そして、
それぞれのオブジェクトのプロパティ値の指定方法は違いますし、メソッドの引数もそれぞれ違います。

これらを全て覚える事は無理でしょう。

まずは、マクロの記録を参照すれば良いです。
(Excel2007は正しく記録されません。)

しかし、
マクロの記録で作成されるVBAコードは少々難点が多く、そのまま使えない場合が多くあります。
そして、
自動作成されたVBAコードを直して、目的の図形にするのも結構大変な事が多いものです。

お勧めの方法としては、
作業用のシートに雛形のオートシェイプを作成しておき、
それをマクロでコピーするようにして、サイズ・位置等を変更するのが簡単です。
この方法が、もっとも簡単ですのでお勧めします。


使用例.

Sub sample()
  With ActiveSheet.Shapes.AddShape(msoShapeRightArrow, 0, 0, 100, 50)
    .Fill.ForeColor.RGB = RGB(0, 176, 80)
    .Line.ForeColor.RGB = vbRed
    With .TextFrame.Characters
      .Text = "右へ移動"
      .Font.Size = 14
      .Font.Bold = True
    End With
    .Top = Range("B2").Top
    .Left = Range("B2").Left
  End With
End Sub

このマクロでは、以下の事を行っています。

1.右向きのブロック矢印を挿入(幅100、高さ50)
2.塗りつぶし色を緑
3.枠の色を赤
4.「右へ移動」の文字追加
5.文字のフォントサイズを14で太字
6.B2セルの位置へ移動

AddShapeの第一引数は、MsoAutoShapeType列挙体になります。

非常にたくさん(140個程度)ありますし、その中から目的の図形を探すのは大変です。
作成する図形のMsoAutoShapeTypeを知りたい場合は、
マクロの記録を使うようにして下さい。

上記のように、全てマクロで作成するより、

前述したとおり、雛形のオートシェイプを用意し、それをコピーして使用する事をお勧めします。



以下も参考にして下さい。

図形(Shape)に関連する記事





同じテーマ「マクロVBA入門」の記事

第94回.コメント(Comment)
第95回.ハイパーリンク(Hyperlink)
第96回.グラフ(Chart)
第97回.図形(Shape)
第98回.Findメソッド(Find,FindNext,FindPrevious)
第99回.Replaceメソッド(置換)
第100回.InputBoxメソッド(インプットボックス)
第101回.Midステートメント
第102回.Intersectメソッド
第103回.Unionメソッド
第104回.GetPhoneticメソッドとSetPhoneticメソッド(フリガナ)

新着記事 ・・・新着記事一覧を見る

数値範囲で表検索するVLOOKUP近似一致|エクセル関数超技(10月5日)
エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.マクロって何?VBAって何?|ExcelマクロVBA入門
7.定数と型宣言文字(Const)|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • 図形(Shape)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。





    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ

    ↑ PAGE TOP