0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EXCEL】図形を表示/非表示

0
Posted at

やること

 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日

 他の回も検索結果にあったが、とりあえず上記を紹介。

一覧

準備

 こんな感じのものを用意する。
image.png

図形作成

 以下を流用して作成。

【EXCEL】図形を自動配置する #Excel - Qiita

図形名抽出

この様なものを使用して作成。
CreateShapeList
'-------------------------------------------------------------------
' 関数: 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行目や非表示に「×」はお好みで。

結果

image.png
 上記は、以下を実行した結果。

図形表示切替
'-------------------------------------------------------------------
' 関数: 図形表示切替
' 説明:
'   シート上の一覧表を参照して図形の表示/非表示を切り替える。
'
'   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

図形名の重複時

image.png

 「図形表示」を実行した結果。

 図形名の重複時は、この方法だと前面の1つ(丸_4の位置)のみ表示される。(丸_8の位置のものは表示されない)

前方一致の例。
図形表示A
'-------------------------------------------------------------------
' 関数: 図形表示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の位置の両方表示される。

image.png

 セルA2を「丸」にしたら、当然、すべて表示される。もしグルーピングして表示させる場合はこのような前方一致案もある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?