ここでは図形に対して共通なことについて記述しています。各図形についてはそれぞれのページを参照ください。(未だ少ししかないのですいません。) マクロで図形を作成・削除したり、図形のプロパティーを取得・変更したり、イベントを受け取ることができます。
Excel2003とExcel2010では図形のオブジェクトの内容に変わったものがあり、2003で出来たことが2010ではできなくなったりとか2010で追加されたものがあるとか、幾つかの処理方法が異なってきます。

1.図形の処理

図形の処理はトップレベルのShapeレベルの処理と各オブジェクト特有の処理に分かれます。各オブジェクト特有の処理をするためには図形の種類を判別し、Shapeから各オブジェクト特有のレベルにアクセスするか、各オブジェクトレベルのオブジェクトを取得して処理します。ここでは分かりやすいように一旦オブジェクト特有のレベルのオブジェクトを取得して処理しています。

2.図形(Shape)の主なメンバー

以下は図形の大きさや位置などの主なメンバーです。図形の種類を判別するためのメンバーは後述するので省いてあります。

  1. ) パブリック プロパティ
    名前データ型/定数説明
    AdjustmentsAdjustments指定した図形のすべての調整値を含むAdjustmentsオブジェクトを取得します。※Read
    AlternativeTextStringオブジェクトを Web ページとして保存する場合、Shape オブジェクトの説明 (代替) 文字列を設定します。※Read
    ApplicationApplicationMicrosoft Excel を表す Application オブジェクトを取得します。※Read
    CalloutCalloutFormat指定した図形の吹き出しの書式プロパティを含むCalloutFormatオブジェクトを取得します。線吹き出しを表すShape オブジェクトに適用されます。※Read
    ChildMsoTriState指定した図形が子図形であるか、またはある図形範囲のすべての図形が同じ親に属する子図形である場合、msoTrue を取得します。※Read
    ConnectionSiteCountInteger指定した図形の結合点の数を取得します。※Read
    ControlFormatControlFormatMicrosoft Excelコントロールのプロパティを含むControlFormatオブジェクトを取得します。※Read
    DiagramDiagram図表を表すDiagramオブジェクトを取得します。
    FillFillFormat指定したグラフまたは図形の塗りつぶしの書式プロパティを含むFillFormatオブジェクトを取得します。※Read
    GroupItemsGroupShapes指定したグループ内の各図形を表すGroupShapesオブジェクトを取得します。グループ内から1つの図形を取得するには、GroupShapesオブジェクトの Itemメソッドを使用します。※Read
    HasDiagramMsoTriState図形または図形範囲に、図表が含まれているかどうかを示す値を取得します。※Read
    HeightSingleオブジェクトの高さを設定します。※R/W
    HorizontalFlipMsoTriStateTrue の場合、指定した図形が水平軸を中心に反転されます。※Read
    HyperlinkHyperlink図形のハイパーリンクを表すHyperlinkオブジェクトを取得します。
    IDInteger指定したオブジェクトの種類を取得します。※Read
    LeftSingleオブジェクトの左端から、列 A の左端まで (ワークシートの場合) またはグラフ領域の左端まで (グラフの場合) の距離。※R/W
    LineLineFormat指定した図形の線の書式プロパティを含むLineFormatオブジェクトを取得します。※Read
    LockedBooleanTrue を設定すると、オブジェクトがロックされます。False を設定すると、シートが保護されているときでも、オブジェクトを変更できます。※R/W
    NameStringオブジェクトの名前を設定します。※R/W
    NodesShapeNodes指定した図形の幾何学的な特徴を表すShapeNodesコレクションを取得します。フリーフォームを表すShape ブジェクトに適用されます。
    OLEFormatOLEFormatOLEオブジェクト プロパティを含むOLEFormatオブジェクトを取得します。※Read
    OnActionString指定したオブジェクトがクリックされたときに実行するマクロの名前を設定します。※R/W
    ParentObject指定したオブジェクトの親オブジェクトを取得します。※Read
    PictureFormatPictureFormat指定した図形の書式プロパティを含むPictureFormatオブジェクトを取得します。図またはOLEオブジェクトを表すShapeオブジェクトに適用されます。※Read
    PlacementXlPlacementオブジェクトとその下にあるセルとの位置関係を設定します。※R/W
    RotationSingle図形の回転角度を度単位で設定します。※R/W
    ShadowBooleanTrue を設定すると、オブジェクトに影が設定されます。※R/W
    TextEffectTextEffectFormat指定した図形のテキスト効果の書式プロパティを含むTextEffectFormatオブジェクトを取得します。ワードアートを表す T:Microsoft.Office.Interop.Excel.Shape オブジェクトに適用されます。※Read
    ThreeDThreeDFormat指定した図形の 3-D 効果の書式プロパティを含むThreeDFormatオブジェクトを取得します。※Read
    TopSingle図形範囲の最前面に位置する図形の上端からワークシートの上端までの距離。※R/W
    TopLeftCellRange指定したオブジェクトの左上隅の下に位置するセルを表すRangeオブジェクトを取得します。※Read
    VerticalFlipMsoTriStateTrue の場合、指定した図形が垂直軸を中心に反転されます。※Read
    VisibleMsoTriStateオブジェクトを表示するか、非表示にするかを決定します。※R/W
    WidthSingleオブジェクトの幅を指定します。※R/W
    ZOrderPositionInteger指定した図形の Z オーダーでの位置を取得します。※Read
    ※Read:値の取得のみ可能です。 ※R/W:値の取得および設定が可能です。
    このページのトップへ戻る
  2. ) パブリック メソッド
    名前説明
    Copyオブジェクトをクリップボードにコピーします。
    CopyPictureオブジェクトをクリップボードへ図としてコピーします。
    Cut指定されたオブジェクトを切り取り、クリップボードに保存または貼り付けます。
    Deleteオブジェクトを削除します。
    Duplicateオブジェクトを複製し、複製されたオブジェクトへの参照を取得します。
    Flip指定された図形を水平軸または垂直軸を中心に反転します。
    IncrementLeft指定した図形を、指定したポイント数だけ水平方向に移動します。
    IncrementRotation指定した図形の Z 軸回りの回転角度を変更します。値は度単位で指定します。図形の絶対回転角度を設定するには、Rotation プロパティを使用します。
    IncrementTop指定した図形を、指定したポイント数だけ垂直方向に移動します。
    RerouteConnectionsコネクタに接続されている図形間で、コネクタの距離が最も短くなるように、コネクタの経路を変更します。
    ScaleHeight指定された倍率で図形の高さを拡大または縮小します。
    ScaleWidth指定された倍率で図形の幅を拡大または縮小します。
    Selectオブジェクトを選択します。
    Ungroup指定した図形または指定範囲の図形に含まれるグループ化された図形のグループ化を解除します。指定した図形に含まれる図および OLE オブジェクトを分解し、グループ化を解除した図形を単一の ShapeRange オブジェクトとして取得します。
    ZOrder指定された図形をコレクションの他の図形の前面または背面に移動します。つまり、図形の Z 方向における順序を変更します。
    このページのトップへ戻る

3.図形の種類の判別方法

オブジェクトの種類の判別方法は少し複雑です。

  1. ) Shapeのプロパティー
    先ず種類の判別に利用するShapeのプロパティーには以下のようなものがあります。また、これらの値を変更することにより、図形を変更することもできます。
    メンバー名データ型/定数説明
    TypeMsoShapeType図形の種類を設定します。※Read
    NameString図形の名前を設定します。※R/W
    AutoShapeTypeMsoAutoShapeType指定したオートシェイプ図形のShapeオブジェクトのオートシェイプの種類を設定します。※R/W
    FormControlTypeXlFormControlMicrosoft Excel コントロールの種類を取得します。※Read
    ConnectorMsoTriStateコネクターかどうかを表します。msoTrue:コネクター、msoFalse:非コネクター※Read
    ConnectorFormatConnectorFormatコネクターの場合その書式プロパティを含むConnectorFormatオブジェクトを取得します。※Read
    ConnectorFormat.TypeMsoConnectorTypeコネクターの場合その種類を取得します。
    コネクターかどうかはConnectorの値で判別します。それ以外については、初めにTypeで判別します。
    または、図形を作成する時に名前を指定して作成し、処理の時にその名前で判別します。
    このページのトップへ戻る
  2. ) MsoShapeType
    Type(MsoShapeType)の一覧です(Excel2010)。バージョンによって少し異なります。
    名前説明
    msoAutoShape1オートシェイプ ※
    msoCallout2吹き出し
    msoCanvas20キャンバス
    msoChart3グラフ
    msoComment4コメント
    msoDiagram21図表
    msoEmbeddedOLEObject7埋め込み OLE オブジェクト
    msoFormControl8フォーム コントロール ※
    msoFreeform5フリーフォーム
    msoGroup6グループ
    msoInk22インク
    msoInkComment23インク コメント
    msoLine9
    msoLinkedOLEObject10リンクされた OLE オブジェクト
    msoLinkedPicture11リンクされた画像
    msoMedia16メディア
    msoOLEControlObject12OLE コントロール オブジェクト。ActiveXコントロール ※
    msoPicture13画像
    msoPlaceholder14プレースホルダ
    msoScriptAnchor18スクリプト アンカー
    msoShapeTypeMixed-2複数の図形の組合せであることを示します。
    msoSlicer25スライサー
    msoSmartArt24Smartアート
    msoTable19
    msoTextBox17テキスト ボックス
    msoTextEffect15テキスト効果
    ※のTypeの場合、さらに以下の判別が可能です。※の無いものでもさらなる判別方法があるかもしれませんが、未調査です。
    このページのトップへ戻る
  3. ) MsoAutoShapeType
    Typeの値がmsoAutoShapeの場合、さらにAutoShapeTypeの値(MsoAutoShapeType)で判別します。
    名前説明
    msoShape16pointStar94星16
    msoShape24pointStar95星24
    msoShape32pointStar96星32
    msoShape4pointStar91星4
    msoShape5pointStar92星5
    msoShape8pointStar93星8
    msoShapeActionButtonBackorPrevious129動作設定ボタン : 戻る/前へ
    msoShapeActionButtonBeginning131動作設定ボタン : 最初
    msoShapeActionButtonCustom125動作設定ボタン : ユーザー設定
    msoShapeActionButtonDocument134動作設定ボタン : ドキュメント
    msoShapeActionButtonEnd132動作設定ボタン : 最後
    msoShapeActionButtonForwardorNext130動作設定ボタン : 進む/次へ
    msoShapeActionButtonHelp127動作設定ボタン : ヘルプ
    msoShapeActionButtonHome126動作設定ボタン : ホーム
    msoShapeActionButtonInformation128動作設定ボタン : 情報
    msoShapeActionButtonMovie136動作設定ボタン : ビデオ
    msoShapeActionButtonReturn133動作設定ボタン : 戻る
    msoShapeActionButtonSound135動作設定ボタン : サウンド
    msoShapeArc25円弧
    msoShapeBalloon106角丸四角形吹き出し
    msoShapeBentArrow41曲折矢印
    msoShapeBentUpArrow44屈折矢印
    msoShapeBevel15額縁
    msoShapeBlockArc20アーチ
    msoShapeCan13円柱
    msoShapeChevron52山形
    msoShapeCircularArrow60環状矢印
    msoShapeCloudCallout108雲形吹き出し
    msoShapeCross11十字形
    msoShapeCube14直方体
    msoShapeCurvedDownArrow48下カーブ矢印
    msoShapeCurvedDownRibbon100下カーブリボン
    msoShapeCurvedLeftArrow46左カーブ矢印
    msoShapeCurvedRightArrow45右カーブ矢印
    msoShapeCurvedUpArrow47上カーブ矢印
    msoShapeCurvedUpRibbon99上カーブリボン
    msoShapeDiamond4ひし形
    msoShapeDonut18ドーナツ
    msoShapeDoubleBrace27中かっこ
    msoShapeDoubleBracket26大かっこ
    msoShapeDoubleWave104小波
    msoShapeDownArrow36下矢印
    msoShapeDownArrowCallout56下矢印吹き出し
    msoShapeDownRibbon98下リボン
    msoShapeExplosion189爆発1
    msoShapeExplosion290爆発2
    msoShapeFlowchartAlternateProcess62フローチャート:代替処理
    msoShapeFlowchartCard75フローチャート:カード
    msoShapeFlowchartCollate79フローチャート:照合
    msoShapeFlowchartConnector73フローチャート:結合子
    msoShapeFlowchartData64フローチャート:データ
    msoShapeFlowchartDecision63フローチャート:判断
    msoShapeFlowchartDelay84フローチャート:理論積ゲート
    msoShapeFlowchartDirectAccessStorage87フローチャート:直接アクセス記憶
    msoShapeFlowchartDisplay88フローチャート:表示
    msoShapeFlowchartDocument67フローチャート:書類
    msoShapeFlowchartExtract81フローチャート:抜出し
    msoShapeFlowchartInternalStorage66フローチャート:内部記憶
    msoShapeFlowchartMagneticDisk86フローチャート:磁気ディスク
    msoShapeFlowchartManualInput71フローチャート:手操作入力
    msoShapeFlowchartManualOperation72フローチャート:手作業
    msoShapeFlowchartMerge82フローチャート:組合せ
    msoShapeFlowchartMultidocument68フローチャート:複数書類
    msoShapeFlowchartOffpageConnector74フローチャート:他ページ結合子
    msoShapeFlowchartOr78フローチャート:理論和
    msoShapeFlowchartPredefinedProcess65フローチャート:定義済み処理
    msoShapeFlowchartPreparation70フローチャート:準備
    msoShapeFlowchartProcess61フローチャート:処理
    msoShapeFlowchartPunchedTape76フローチャート:せん孔テープ
    msoShapeFlowchartSequentialAccessStorage85フローチャート:順次アクセス記憶
    msoShapeFlowchartSort80フローチャート:分類
    msoShapeFlowchartStoredData83フローチャート:記憶データ
    msoShapeFlowchartSummingJunction77フローチャート:和接合
    msoShapeFlowchartTerminator69フローチャート:端子
    msoShapeFoldedCorner16メモ
    msoShapeHeart21ハート
    msoShapeHexagon10六角形
    msoShapeHorizontalScroll102横巻き
    msoShapeIsoscelesTriangle7二等辺三角形
    msoShapeLeftArrow34左矢印
    msoShapeLeftArrowCallout54左矢印吹き出し
    msoShapeLeftBrace31左中かっこ
    msoShapeLeftBracket29左大かっこ
    msoShapeLeftRightArrow37左右矢印
    msoShapeLeftRightArrowCallout57左右矢印吹き出し
    msoShapeLeftRightUpArrow40三方向矢印
    msoShapeLeftUpArrow43二方向矢印
    msoShapeLightningBolt22稲妻
    msoShapeLineCallout1109線吹き出し1(枠付き)
    msoShapeLineCallout1AccentBar113強調線吹き出し1
    msoShapeLineCallout1BorderandAccentBar121強調線吹き出し1(枠付き)
    msoShapeLineCallout1NoBorder117線吹き出し1
    msoShapeLineCallout2110線吹き出し2(枠付き)
    msoShapeLineCallout2AccentBar114強調線吹き出し2
    msoShapeLineCallout2BorderandAccentBar122強調線吹き出し2(枠付き)
    msoShapeLineCallout2NoBorder118線吹き出し2
    msoShapeLineCallout3111線吹き出し3(枠付き)
    msoShapeLineCallout3AccentBar115強調線吹き出し3
    msoShapeLineCallout3BorderandAccentBar123強調線吹き出し3(枠付き)
    msoShapeLineCallout3NoBorder119線吹き出し3
    msoShapeLineCallout4112線吹き出し4(枠付き)
    msoShapeLineCallout4AccentBar116強調線吹き出し4
    msoShapeLineCallout4BorderandAccentBar124強調線吹き出し4(枠付き)
    msoShapeLineCallout4NoBorder120線吹き出し4
    msoShapeMathPlus163加算記号
    msoShapeMathMinus164減算記号
    msoShapeMathMultiply165乗算記号
    msoShapeMathDivide166除算記号
    msoShapeMathEqual167等号
    msoShapeMathNotEqual168不等号
    msoShapeMixed-2戻り値のみ。複数の図形の組合せであることを示します。
    msoShapeMoon24
    msoShapeNoSymbol19禁止
    msoShapeNotchedRightArrow50V字形矢印
    msoShapeNotPrimitive138Not supported.
    msoShapeOctagon6八角形
    msoShapeOval9楕円
    msoShapeOvalCallout107円形吹き出し
    msoShapeParallelogram2平行四辺形
    msoShapePentagon51ホームベース
    msoShapePlaque28ブローチ
    msoShapeQuadArrow39四方向矢印
    msoShapeQuadArrowCallout59四方向矢印吹き出し
    msoShapeRectangle1四角形
    msoShapeRectangularCallout105四角形吹き出し
    msoShapeRegularPentagon12五角形
    msoShapeRightArrow33右矢印
    msoShapeRightArrowCallout53右矢印吹き出し
    msoShapeRightBrace32左中かっこ
    msoShapeRightBracket30右大かっこ
    msoShapeRightTriangle8直角三角形
    msoShapeRound1Rectangle1511つの角を丸めた四角形
    msoShapeRound2DiagRectangle153対角する2つの角を丸めた四角形
    msoShapeRound2SameRectangle152片側の2つの角を丸めた四角形
    msoShapeRoundedRectangle5角丸四角形
    msoShapeRoundedRectangularCallout106角丸四角形吹き出し。msoShapeBalloonと同じ
    msoShapeSmileyFace17スマイル
    msoShapeSnip1Rectangle1551つの角を切り取った四角形
    msoShapeSnip2DiagRectangle157対角する2つの角を切り取った四角形
    msoShapeSnip2SameRectangle156片側の2つの角を切り取った四角形
    msoShapeSnipRoundRectangle1541つの角を切り取って1つの角を丸めた四角形
    msoShapeStripedRightArrow49ストライプ矢印
    msoShapeSun23太陽
    msoShapeTrapezoid3台形
    msoShapeUpArrow35上矢印
    msoShapeUpArrowCallout55上矢印吹き出し
    msoShapeUpDownArrow38上下矢印
    msoShapeUpDownArrowCallout58上下矢印吹き出し
    msoShapeUpRibbon97上リボン
    msoShapeUTurnArrow42Uターン矢印
    msoShapeVerticalScroll101縦巻き
    msoShapeWave103大波
    このページのトップへ戻る
  4. ) XlFormControl
    Typeの値がmsoFormControlの場合、さらにFormControlTypeの値(XlFormControl)で判別します。AutoShapeTypeの値は、msoShapeMixedです。
    オブジェクトはShape.OLEFormat.objectをそのデータ型で受けます。
    名前説明データ型
    xlButtonControl0ボタンButton
    xlCheckBox1チェック ボックスCheckBox
    xlDropDown2コンボ ボックスComboBox
    xlEditBox3テキスト ボックスTextBox
    xlGroupBox4グループ ボックスGroupBox
    xlLabel5ラベルLabel
    xlListBox6リスト ボックスListBox
    xlOptionButton7オプション ボタンOptionButton
    xlScrollBar8スクロール バーScrollBar
    xlSpinner9スピン ボタンSpinButton
  5. ) progID
    Typeの値がmsoOLEControlObjectの場合、オブジェクトはActiveXです。Excelが使用しているAxtiveXの種類をOLEFormatのメンバーのprogIDの値(String)で判別します。 AutoShapeTypeの値は、msoShapeMixedです。 msoFormControlと異なりオブジェクトはShape.OLEFormat.object.objectをObject型で受けます。
    以下はExcelに元からあるフォームのコントロールのprogIDです。
    説明
    Forms.CheckBox.1チェック ボックス
    Forms.ComboBox.1コンボ ボックス
    Forms.CommandButton.1コマンド ボタン
    Forms.Image.1イメージ
    Forms.Label.1ラベル
    Forms.ListBox.1リスト ボックス
    Forms.OptionButton.1オプション ボタン
    Forms.ScrollBar.1スクロール バー
    Forms.SpinButton.1スピン ボタン
    Forms.TextBox.1テキスト ボックス
    Forms.ToggleButton.1トグル ボタン
    他のActiveXの場合例えば次のようなものがあるようです。
    ShockwaveFlash.ShockwaveFlash.*
    このページのトップへ戻る
  6. ) ConnectorFormat.Type
    Connectorの値がmsoTrueの場合はコネクターです。さらにConnectorFormatのメンバーのTypeの値(MsoConnectorType)で判別します。AutoShapeTypeの値は、msoShapeMixedです。
    名前説明
    msoConnectorCurve3曲線コネクタ。
    msoConnectorElbow2カギ線コネクタ。
    msoConnectorStraight1直線コネクタ。
    msoConnectorTypeMixed-2値の取得のみ可能です。複数のコネクタの組合せであることを示します。
    このページのトップへ戻る

4.図形オブジェクトの取得方法

図形オブジェクトの取得方法はFor EachステートメントでLoopを回し一つ一つ図形オブジェクトのプロパティーをチェックした後に取得する方法と図形の名前を指定して取得する方法とがあります。
どちらの方法でも特定の図形のオブジェクトを取得するためには図形を作成する時に名前を付けておくことが必要です。

  1. ) For Eachステートメントによる取得
    同じ図形に対して同じ処理(削除、背景色の設定、テキストの削除など)を行う時に使用すると便利です。図形を作成する時に特に名前を指定しない場合が多いです。 次の例ではWorksheet上の全TextBoxの幅を50にします。
    Sub example1400(sht As Worksheet)
        Dim shp As Shape
            
        For Each shp In sht.Shapes
            If shp.Type = msoTextBox Then        'ShapeのTypeがmsoTextBoxを処理。
                shp.Width = 50
            End If
        Next
    
    End Sub
    
  2. ) 図形の名前による取得
    以下はTypeがmsoFormControlのスクロールバーの場合の例です。「scbrList」という名前のスクロールバーのオブジェクトを取得し、プロパティーValueの値を設定しています。
    このようにワークシートから図形の名前でShapeオブジェクトとして一旦取得し、それぞれのオブジェクト型のオブジェクトに変換します。msoFormControlの場合は前述のようにその対象のデータ型(ここではScrollBar型)で受けます。
    Sub scbrList_Reset(sht As Worksheet)
        Dim shp         As Shape
        Dim scbr        As ScrollBar
        
        Set shp = sht.Shapes("scbrList")
        Set scbr = shp.OLEFormat.Object
        scbr.Value = 1
        Set shp = Nothing
        Set scbr = Nothing
    End Sub
    

5.オブジェクトのプロパティー構成の調べ方

オブジェクトのプロパティー構成はワークシート上に図形を作成し、以下のようなマクロをデバッグモードで実行し、ウォッチウィンドウでShape(ここではshp)の中を展開して調査します。

Sub example6000()
    Dim sht As Worksheet
    Dim shp As Shape
    Dim work As String

    Set sht = ActiveSheet
    For Each shp In sht.Shapes
        work = shp.Name
    Next shp

End Sub

excel/ExcelShape1.jpg excel/ExcelShape2.jpg

このページのトップへ戻る


最終更新のRSS
Last-modified: 2014-03-11 (火) 01:58:42 (3859d)