VBAサンプル集
図形オートシェイプ(Shape)の複数選択

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2020-04-16 最終更新日:2020-04-16

図形オートシェイプ(Shape)の複数選択


図形オートシェイプを複数選択するVBAについてのサンプルと簡単な解説です。


Shapeオブジェクトは非常に複雑で、簡単な操作でもVBAの書き方が分からない場合も多くあります。
Shapeの基本については以下を参照してください。

第97回.図形オートシェイプ(Shape)|VBA入門
・図形オートシェイプ(Shape)関連のオブジェクト群 ・図形オートシェイプ(Shape)の追加 ・図形オートシェイプ(Shape)の削除 ・図形オートシェイプ(Shape)の編集 ・図形オートシェイプ(Shape)の全選択 ・図形オートシェイプ(Shape)の扱い方を工夫する ・オートシェイプ(Shape)を扱う実践例 ・図形オートシェイプ(Shape)に関連する記事

ワークシートの全てのShapeを選択する場合

ワークシート内のオートシェイプの全体を扱うには、ShapesとDrawingObjectstの2通りがあります。
ShapesとDrawingObjectsの相違点と使い方
・Shapes コレクション ・DrawingObjects コレクション ・ShapesとDrawingObjectsの相違点 ・DrawingObjectsの便利な使い道 ・最後に ・図形オートシェイプ(Shape)に関連する記事

ActiveSheet.Shapes.SelectAll

ActiveSheet.DrawingObjects.Select

ShapeオブジェクトのSelectメソッド

Shape.Selectメソッドの構文

Shape.Select [Replace:=True/False]

Trueを指定した場合、現在の選択範囲を置き換えます。
Falseを指定した場合、選択範囲を拡張します。
省略時はTrue。
Dim sp As Shape
For Each sp In ActiveSheet.Shapes
  sp.Select Replace:=False
Next

上記VBAでは、Selectメソッドを使って、シートの全Shapeを選択しています。

ShapeRangeオブジェクト

ShapeRangeオブジェクトは、図形セットである図形範囲を表します。
図形範囲には、ワークシートの1つまたは複数の図形を含めることができます。
ShapeRangeオブジェクトは、ShapesコレクションのRangeプロパティを使用して取得します。

ShapesコレクションのRangeプロパティ

Shapes.Range(Index)

Indexに整数または文字列の配列を指定するには、
Array関数を使用して、名前またはインデックス番号の配列を作成します。

シート内の指定名称の図形を選択

以下では、Shape.Nmaeの一部が、「図*」のオートシェイプを選択しています。

Shape.Nmaeの配列を作成

Sub sample1()
  Dim ws As Worksheet
  Set ws = ActiveSheet
  ws.Range("A1").Select '図形選択を解除します。
  
  Dim ary() As Variant
  Dim sp As Shape
  Dim i As Long
  
  i = 0
  For Each sp In ws.Shapes
    If sp.Name Like "図*" Then
      i = i + 1
      If i = 1 Then
        ReDim ary(1 To i)
      Else
        ReDim Preserve ary(1 To i)
      End If
      ary(i) = sp.Name
    End If
  Next
  
  If i > 0 Then
    ws.Shapes.Range(ary).Select
  End If
End Sub

Aryには、図形の名称が配列で入ります。

VBA マクロ Shape Range 複数選択

ShapeのIndexの配列を作成

Sub sample2()
  Dim ws As Worksheet
  Set ws = ActiveSheet
  ws.Range("A1").Select '図形選択を解除します。
  
  Dim ary() As Variant
  Dim i As Long
  Dim isSelect As Boolean
  
  isSelect = False
  ReDim ary(1 To ws.Shapes.Count)
  For i = 1 To ws.Shapes.Count
    If ws.Shapes(i).Name Like "図*" Then
      ReDim Preserve ary(1 To i)
      ary(i) = i
      isSelect = True
    End If
  Next
  
  If isSelect Then
    ws.Shapes.Range(ary).Select
  End If
End Sub

Aryには、図形のIndexの数値が配列で入ります。

VBA マクロ Shape Range 複数選択

ary(3)はEmpty値なので、ShapeRangeには含まれません。
これは、配列にその要素を作らないようにしても構いませんが、
Variant型で値を代入しない事で対象外になるので、上記VBAは簡潔に済ませています。

Shape.Selectメソッドを使う

Sub sample3()
  Dim ws As Worksheet
  Set ws = ActiveSheet
  Range("A1").Select '図形選択を解除します。
  
  Dim sp As Shape
  For Each sp In ws.Shapes
    If sp.Name Like "図*" Then
      sp.Select Replace:=False
    End If
  Next
End Sub

ShapeオブジェクトのSelectメソッドを使っています。
Replace:=False
これによって、拡張選択しています。



同じテーマ「マクロVBAサンプル集」の記事

ボタンに表示されているテキストを取得(Application.Caller)
Excelの表をPowerPointへ図として貼り付け
VBAで表やグラフをPowerPointへ貼り付ける
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除
Shift_JISのテキストファイルをUTF-8に一括変換
VBAコードの全プロシージャー・プロパティ一覧を取得
数式バーの高さを数式の行数で自動設定
図形オートシェイプ(Shape)の複数選択
GoogleスプレッドシートをExcelにインポートする
多階層フォルダ(ディレクトリ)の作成
漢数字→数値変換:漢数字=NUMBERSTRING(数値,1)


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

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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