やること
EXCELの図形を表示/非表示をVBAで行うメモ。
事前確認:Qiitaでの記事
ここで、以下の検索をしたところ、40件ヒットした。(2026/10/15時点)
「EXCEL 図形 非表示に切り替え」の検索結果 - Qiita
この中から、適当に以下紹介。
図形作成
[ExcelVBA]吹き出しをダブルクリックで自動作成 #図形 - Qiita
投稿日 2023年04月09日
Tips / TOOLS
Excelファイルの容量が重い時に確認すること #VBA - Qiita
最終更新日 2026年01月25日 投稿日 2026年01月24日
「○校時」表示できる時計を作ってみた #GoogleSpreadSheet - Qiita
最終更新日 2024年02月27日 投稿日 2024年02月27日
初心者のためのExcel VBA入門
📊連載第37回!初心者のためのExcel VBA入門:セル値のコピーで悩まない!💡 クリップボード履歴への自動登録で作業効率アップ🚀 #参照設定 - Qiita
最終更新日 2025年12月25日 投稿日 2025年11月26日
他の回も検索結果にあったが、とりあえず上記を紹介。
一覧
- 第1回: Excel VBAの基礎知識とセキュリティ設定
- 第2回: Excel VBAの基本操作とオブジェクトの理解
- 第3回: Excel VBAにおける変数と定数の基本
- 第4回: Excel VBAにおけるシート操作の基本とエラー処理
- 第5回: Excel VBAにおける条件分岐
- 第6回: Excel VBAにおける繰り返し処理の基本
- 第7回: Excel VBAにおける配列とFor Eachの活用
- 第8回: Excel VBAにおけるFormulaとValueの使い分けとユーザー入力の取得
- 第9回: Excel VBAにおけるファイル操作とフォルダ管理の基本
- 第10回: Excel VBAにおけるFileSystemObjectを活用した高度なファイル操作
- 第11回: Excel VBAにおけるFileSystemObjectを活用した高度なファイル操作 応用編
- 第12回: Excel VBAにおけるStrConv関数の活用と応用テクニック
- 第13回: Excel VBAにおけるワークブックの安全な操作と管理テクニック
- 第14回: Excel VBAにおけるFunction(関数)の作成と活用テクニック
- 第15回: Excel VBAにおける配列を返す関数の作成と活用テクニック
- 第16回: Excel VBAにおけるコレクションの活用と応用テクニック
- 第17回: Excel VBAにおける辞書型(Dictionary)の活用と応用テクニック
- 第18回: Excel VBAにおけるEnum型を活用した関数設計と実装テクニック
- 第19回: Excel VBAにおけるユーティリティ関数の作成と活用テクニック
- 第20回: Excel VBAにおける正規表現を活用したファイル名解析テクニック
- 第21回: Excel VBAで範囲内の図形を効率的に削除するテクニック
- 第22回: Excel VBAで最新ファイルを効率的に検索する関数設計テクニック
- 第23回: Excel VBAで選択した範囲に対して、一行おきに空行を挿入するテクニック
- 第24回: Excel VBAで可視セルを活用したフィルター操作テクニック
- 第25回: Excel VBAで可視セルのみを効率的にコピーするテクニック
- 第26回: Excel VBAにおけるファイル・フォルダ移動の再帰処理テクニック
- 第27回: Excel VBAにおける親フォルダパス取得の実装テクニック
- 第28回: Excel VBAにおける独自イベントの設計と実装テクニック
- 第29回: Excel VBAにおけるEnum型を活用したメンテナンス性向上テクニック
- 第30回: Excel VBAにおける列番号からアルファベット変換の効率的実装テクニック
- 第31回: Excel VBAにおける重複のないシート名生成の効率的実装テクニック
- 第32回: Excel VBAにおけるセル参照形式の切り替えテクニック
- 第33回: Excel VBAにおけるシート表示制御の実装テクニック
- 第34回: Excel VBAにおけるAI活用によるコード生成の実装テクニック
- 第35回: Excel VBAマクロのアドイン化によるブック共有テクニック
- 第36回: Excel VBAにおける目次自動生成の実装テクニック
- 第37回: Excel VBAにおけるWindowsクリップボード履歴へのセル値連続コピー実装テクニック
- 第38回: Excel VBAで複数列対応のフィルタ可視セル取得関数を実装するテクニック
- 第39回: Excel VBAで可変引数を活用した文字列連結関数を実装するテクニック
- 第40回: Excel VBAにおけるRangeオブジェクトの基礎から実践的な活用テクニックまで
準備
図形作成
以下を流用して作成。
【EXCEL】図形を自動配置する #Excel - Qiita
図形名抽出
この様なものを使用して作成。
'-------------------------------------------------------------------
' 関数: CreateShapeList
' 説明:
' アクティブシート上の図形一覧を取得し、
' A列へ図形名を出力する。
'
' 引数:
' なし(ActiveSheetを対象)
'
' 戻り値:
' なし
'
' 使用例:
' Call CreateShapeList
'
' 注意:
' ・既存のA列データは上書きされる
' ・Shapeコレクションに存在する全図形を対象とする
'-------------------------------------------------------------------
Sub CreateShapeList()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim shp As Shape
Dim rowNo As Long
'---------------------------------------------------------------
' 出力開始行
'---------------------------------------------------------------
rowNo = 2
'---------------------------------------------------------------
' ヘッダ出力
'---------------------------------------------------------------
ws.Range("A1").Value = "図形名"
'---------------------------------------------------------------
' 図形一覧を取得してA列へ出力
'---------------------------------------------------------------
For Each shp In ws.Shapes
ws.Cells(rowNo, "A").Value = shp.Name
rowNo = rowNo + 1
Next shp
End Sub
その他
表示したい図形名の隣(B列)に「○」を入れる。
1行目や非表示に「×」はお好みで。
結果
'-------------------------------------------------------------------
' 関数: 図形表示切替
' 説明:
' シート上の一覧表を参照して図形の表示/非表示を切り替える。
'
' A列 : 図形名
' B列 : 表示フラグ
'
' B列に「○」が入力されている場合は図形を表示し、
' それ以外(空白、×、その他文字列)の場合は非表示にする。
'
' 引数:
' なし(ActiveSheet を対象とする)
'
' 戻り値:
' なし
'
' 使用例:
' Call 図形表示切替
'
' 注意:
' ・A列には存在する図形名を入力すること
' ・存在しない図形名が入力されている場合は無視する
' ・B列が「○」以外の場合は非表示となる
' ・図形のVisibleプロパティを変更する
'-------------------------------------------------------------------
Sub 図形表示切替()
Dim i As Long
Dim shp As Shape
Dim shpName As String
'---------------------------------------------------------------
' A列の最終行を取得
'---------------------------------------------------------------
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
'-----------------------------------------------------------
' A列から図形名を取得
'-----------------------------------------------------------
shpName = Cells(i, "A").Value
'-----------------------------------------------------------
' 図形取得
' 存在しない図形名の場合はエラーとなるため
' 一時的にエラー処理を無効化する
'-----------------------------------------------------------
On Error Resume Next
Set shp = ActiveSheet.Shapes(shpName)
'-----------------------------------------------------------
' 図形が存在する場合のみ処理
'-----------------------------------------------------------
If Not shp Is Nothing Then
'-------------------------------------------------------
' B列の表示フラグを判定
'
' ○ : 表示
' その他 : 非表示
'-------------------------------------------------------
If Cells(i, "B").Value = "○" Then
'---------------------------------------------------
' 図形を表示
'---------------------------------------------------
shp.Visible = msoTrue
Else
'---------------------------------------------------
' 図形を非表示
'---------------------------------------------------
shp.Visible = msoFalse
End If
End If
'-----------------------------------------------------------
' 次ループのためオブジェクト変数を初期化
'-----------------------------------------------------------
Set shp = Nothing
'-----------------------------------------------------------
' 通常のエラー処理に戻す
'-----------------------------------------------------------
On Error GoTo 0
Next i
End Sub
図形の表示 / 非表示
セルA2の図形名の図形を表示する場合。
Sub 図形表示()
Dim shpName As String
shpName = Range("A2").Value
ActiveSheet.Shapes(shpName).Visible = msoTrue
End Sub
セルA2の図形名の図形を非表示にする場合。
Sub 図形非表示()
Dim shpName As String
shpName = Range("A2").Value
ActiveSheet.Shapes(shpName).Visible = msoFalse
End Sub
図形名の重複時
「図形表示」を実行した結果。
図形名の重複時は、この方法だと前面の1つ(丸_4の位置)のみ表示される。(丸_8の位置のものは表示されない)
前方一致の例。
'-------------------------------------------------------------------
' 関数: 図形表示A
' 説明:
' B1セルに入力された文字列で始まる図形を
' すべて表示する。
'
' 例:
' B1 = "丸_A"
'
' 以下を表示
' 丸_A
' 丸_A_1
' 丸_A_2
' 丸_A_100
'
'-------------------------------------------------------------------
Sub 図形表示A()
Dim shp As Shape
Dim targetName As String
targetName = Range("A2").Value
For Each shp In ActiveSheet.Shapes
If Left(shp.Name, Len(targetName)) = targetName Then
shp.Visible = msoTrue
End If
Next shp
End Sub
結果。この方法だと丸_4の位置、丸_8の位置の両方表示される。
セルA2を「丸」にしたら、当然、すべて表示される。もしグルーピングして表示させる場合はこのような前方一致案もある。



