Softex CelwareTech Blog
Excel VBA2026-05-27

指定名の図形を取得するExcel VBA汎用関数 GetShapeByName

指定したワークシート上から名前一致のShapeを取得し、見つからない場合はNothingを返すExcel VBA汎用関数を解説します。

Excel VBA汎用プロシージャShape図形エラー回避

概要

GetShapeByNameは、指定したワークシートから、指定名のShapeを取得する汎用関数です。図形が見つからない場合はエラーで止めず、Nothingを返します。

選択セルに追従する増減ボタンでは、「減少ボタン」「増加ボタン」が既に存在するかを確認するために使っています。

使う場面

  • 図形ボタンを名前で取得したい
  • 図形が存在しない場合でもマクロを止めたくない
  • 図形の作成済み判定をしたい
  • Application.Callerで取得した図形名からShapeを取りたい

使用例

Dim shp As Shape
Set shp = GetShapeByName(ActiveSheet, "増加ボタン")

If shp Is Nothing Then
    MsgBox "対象の図形が見つかりません"
Else
    shp.Visible = msoTrue
End If

コピー可能な実装コード

GetShapeByName.bas
vba
コードを読み込み中...

初心者向けコード解説

Sheet.Shapes(ShapeName)は、指定名の図形が存在しない場合にエラーになります。そこでOn Error Resume Nextで一時的にエラーを無視し、取得できなければOutputNothingのままにしています。

取得後はOn Error GoTo 0で通常のエラー処理に戻します。この戻し忘れをすると、後続処理のエラーまで無視してしまうため注意が必要です。

関連記事

注意点

  • Sheetには、対象図形が存在するワークシートを渡します。
  • 図形名が重複しない前提で使います。
  • 見つからない場合はNothingが返るため、呼び出し側で必ず確認します。
  • On Error Resume Nextは関数内ですぐ解除し、後続処理のエラーを隠さないようにします。

軽いまとめ

GetShapeByNameを用意しておくと、図形名での取得と存在チェックを1行で扱えます。図形ボタンを使うExcelツールでは、かなり再利用しやすい小さな部品です。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →