【Excel VBA】図形の名前とテキストを一覧に出力する

■実装するプログラムの概要

任意のシートに配置している図形について、図形の名前とテキストを一覧に出力する。

・イメージ図

「検索対象」シートに設置している図形の名前とテキストを「検索結果」シート「の一覧出力」ボタン押下時に一覧表に出力する。

■フローチャート

■プログラム仕様

インプット処理内容アウトプット
シート名をセットする。
「検索結果」シート
「検索対象」シート
「検索結果」シート初期化処理
・開始時間(C2セル)
・終了時間(C3セル)
・検索結果一覧表(6行目以降)
「No.」列出力用の初期値(1)をセットする。
行カウンタの初期値(6)をセットする。
※一覧の結果を6行目から出力するため。
検索開始時間を出力する。【セルの値】
「検索結果」シート
タイムスタンプ
「検索対象」シートの図形【ループ処理開始】
図形の数だけ繰り返し
「No.」列に番号を出力する。【セルの値】
「検索結果」シート
1から連番
「検索対象」シートの図形「図形名」列に図形の名前を出力する。【セルの値】
「検索結果」シート
図形の名前
「検索対象」シートの図形「テキスト」列に図形に記載したテキストを出力する。【セルの値】
「検索結果」シート
テキスト
「No.」と「行カウンタ」をインクリメントする。
検索終了時間を出力する。【セルの値】
「検索結果」シート
タイムスタンプ
終了メッセージを出力する。【メッセージボックス】
「終了」
シートオブジェクトを解放する。

■サンプルコード

Option Explicit

' 「図形一覧出力」ボタン押下時の処理
Public Sub Btn_Click_GetShape()

    Dim shtname_result  As Worksheet    ' 「検対結果」シートを格納する変数
    Dim shtname_search  As Worksheet    ' 「検索対象」シートを格納する変数
    Dim iNo             As Integer      ' No.出力カウンタ
    Dim irow            As Integer      ' 行カウンタ
    Dim shp             As Shape        ' 図形オブジェクトを格納する変数
    
On Error GoTo Btn_Click_GetShape_ERROR

    ' シート名をセット
    Set shtname_result = Sheets("検索結果")
    Set shtname_search = Sheets("検索対象")
    
    ' 「検索結果」シートの初期化
    With shtname_result
        .Cells(2, 3).Value = ""
        .Cells(3, 3).Value = ""
        .Range("6:1048576").ClearContents
    End With
    
    ' 初期値をセット
    ' No.出力:1をセット
    iNo = 1
    
    ' 「検対結果」シート6行目をスタート行とする
    irow = 6
    
    ' 検索開始時間を出力
    shtname_result.Cells(2, 3).Value = Now
    
    ' 「検索対象」シートにフォーカス
    With shtname_search

        ' 図形の数だけループ処理
        For Each shp In .Shapes

            ' 「No.」列に番号を付与
            shtname_result.Cells(irow, 2).Value = iNo
            ' 「図形名」列に図形の名前を付与
            shtname_result.Cells(irow, 3).Value = shp.Name
            ' 「テキスト」列に図形に記載したテキストを付与
            shtname_result.Cells(irow, 4).Value = shp.TextFrame2.TextRange.Text

            ' インクリメント処理
            iNo = iNo + 1
            irow = irow + 1
        Next
    End With
    
    ' 検索終了時間を出力
    shtname_result.Cells(3, 3).Value = Now

    ' 終了メッセージを出力
    MsgBox "終了"

' 終了処理へ
GoTo Btn_Click_GetShape_Exit

' エラーハンドリング
Btn_Click_GetShape_ERROR:

    ' エラーメッセージを出力
    MsgBox Err.Description

    ' 終了処理へ
    GoTo Btn_Click_GetShape_Exit

' 終了処理
Btn_Click_GetShape_Exit:

    ' シートを解放
    Set shtname_search = Nothing
    Set shtname_result = Nothing
    
End Sub

■実行結果

タイトルとURLをコピーしました