【Excel VBA】図形(オートシェイプ)の文字を検索するアドイン

当ページのリンクには広告が含まれている可能性があります。
図形(オートシェイプ)文字列を検索するアドイン

こんにちは、ユーキです。

今回は、図形(オートシェイプ)の文字を検索する機能をアドインで作成したいと思います。

目次

作成する機能

作成する機能は、以下になります。

作成機能
  • フォームで検索キーワードを入力
  • 入力したキーワードを含む図形(オートシェイプ)の文字を検索
  • 検索結果はフォームのリストボックスに表示
  • リストボックスをクリックすると、該当する図形(オートシェイプ)を選択
  • アドインで作成し、どんなブックでも実行可能とする

図形(オートシェイプ)の文字を検索するアドインの作成

それでは、早速アドインを作っていきましょう。

アドイン作成

まずは、アドインファイルを作成します。

アドイン用メニューの作成

作成するアドインには、処理を呼び出す部品が必要になります。まずは、EXCELのメニューバーにアドイン用メニューを追加する処理を実装しましょう。

EXCELのメニューバーにアドイン用メニューを追加しておけば、開発(デバッグ)がやりやすくなります。

以下の記事を参考にして、インストール時、アンインストール時にメニューを追加、削除される機能を実装しましょう。
処理は、ThisWorkbookに記述します。

あわせて読みたい
【Excel VBA】メニューバーに独自メニューを追加する Excelのメニューバーに独自メニューを追加する方法を、わかりやすくコード付きで紹介します。削除のやり方についても説明します。
'-----------------------------------------------------------
'Addinインストール イベント
'-----------------------------------------------------------
Private Sub Workbook_AddinInstall()
    Dim menuBar As CommandBar
    Set menuBar = Application.CommandBars("Worksheet Menu Bar")
    'サブメニューを追加
    Dim menuSbMenu As CommandBarPopup
    Set menuSbMenu = menuBar.Controls.Add(Type:=msoControlPopup)
    menuSbMenu.Caption = "yuuqyアドイン"
    
    'サブメニューにボタン追加
    Dim sbMBtn1 As CommandBarButton
    Set sbMBtn1 = menuSbMenu.Controls.Add(Type:=msoControlButton)
    sbMBtn1.Style = msoButtonCaption
    sbMBtn1.Caption = "オートシェイプ検索"
    sbMBtn1.OnAction = "searchShapeText"
End Sub
'-----------------------------------------------------------
'Addinアンインストール イベント
'-----------------------------------------------------------
Private Sub Workbook_AddinUninstall()
    Dim menuBar As CommandBar
    Set menuBar = Application.CommandBars("Worksheet Menu Bar")
    menuBar.Controls("yuuqyアドイン").Delete
End Sub

ボタン押下時の処理名は「searchShapeText」としておきます。

アドインの保存

メニューの追加、削除処理が書けたら、ここでアドインとして保存をしておきましょう。

ファイルの種類は「Excel アドイン(*.xlam)」としてください。ファイル名はアドインの名前となるので、自分の好きな名称にしてください。今回は、「ユーキブログAddin」としました。

作成したアドインをインストールする

作成したアドインをインストールしましょう。

インストールの方法は、以下の記事を参考にしてください。

あわせて読みたい
【Excel VBA】アドインのインストール こんにちは、ユーキです。 今回は、Excelアドインのインストール方法について紹介します。 【Excelアドインのインストールの仕方】 アドインのインストールは簡単です。...

検索キーワードを入力するフォームの作成

アドインができたら、次は検索キーワードを入力するフォームの作成です。

フォームの作成

フォームの作成は、以下の記事を参考にします。

あわせて読みたい
【Excel VBA】ユーザーフォームを作成する方法 VBAでユーザーフォームを作成する方法について、初心者でもわかるように説明します。

テキストボックスとコマンドボタン、リストボックスを配置した画面を作成します。

作成画面

変更したプロパティは以下になります。

  • フォーム
    • 名前:frmSearchShape
  • テキストボックス
    • 名前:txtKeyword
  • コマンドボックス
    • 名前:btnSearch
    • Caption:検索
  • リストボックス
    • 名前:lstResult
    • ColumnCount:3

アドインから作成したフォームを呼び出す

作成したアドインからフォームを呼び出せるようにします。この処理は、標準モジュールに記述をします。

Public Sub searchShapeText()
    frmSearchShape.Show
End Sub

検索処理の実装

それでは、メインの機能を実装しましょう。図形(オートシェイプ)の文字を検索する処理は以下の記事を参考にします。

あわせて読みたい
【Excel VBA】図形(オートシェイプ)の文字列検索 こんにちは、ユーキです。 今回は、たくさんある図形(オートシェイプ)の中に書かれている文字列を検索する方法を紹介します。 【図形(オートシェイプ)の文字列検索...

検索結果をリストボックスに表示する処理は、以下の記事を参考にします。

あわせて読みたい
【Excel VBA】リストボックスの使い方 VBAにおけるリストボックスの基本的な使い方を画像、コードを交えてわかりやすく設営しています。これを読めば、基本的な使い方はわかります。

検索結果はリストボックスに表示をするようにします。この後、選択できるようにするため、シート名、図形(オートシェイプ)名もリストボックスに表示するようにします。

Private Sub btnSearch_Click()
    Dim shape As Variant
    Dim sheet As Variant
    Dim hitCnt As Long
    Dim seachKey As String
    hitCnt = 0
    seachKey = Me.txtKeyword.Text
    
    For Each sheet In ActiveWorkbook.Sheets
        For Each shape In sheet.Shapes
            If shape.TextFrame2.HasText Then
                If InStr(shape.TextFrame2.TextRange.Text, seachKey) > 0 Then
                    ListBox1.AddItem
                    ListBox1.List(hitCnt, 0) = shape.TextFrame.Characters.Text
                    ListBox1.List(hitCnt, 1) = sheet.Name
                    ListBox1.List(hitCnt, 2) = shape.Name
                    
                    hitCnt = hitCnt + 1
                End If
            End If
        Next
    Next
End Sub

これで、アクティブシートの図形(オートシェイプ)のうち、検索キーワードに指定した文字列がある図形(オートシェイプ)が検索できるようになりました。

図形(オートシェイプ)を選択する処理の実装

検索結果のリストボックスで該当行をダブルクリックすると、選択した図形(オートシェイプ)を選択するようにします。

Private Sub lstResult_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim i As Long
    
    For i = 0 To lstResult.ListCount - 1
        If Me.lstResult.Selected(i) = True Then
            ActiveWorkbook.Sheets(Me.lstResult.List(i, 1)).Select
            ActiveSheet.Shapes(Me.lstResult.List(i, 2)).Select
            '選択行が見つかったので、処理終了
            Exit Sub
        End If
    Next
End Sub

これで完成となります。

動作検証

それでは、作った画面を動かしてみましょう。

アドインメニューから、yuuqアドインを選択すると、メニューが展開されます。表示されたメニューから「オートシェイプ検索」を選択すると、作成したユーザーフォームが表示されます。

表示されたユーザーフォームのテキストボックスに検索したキーワードを入力します。今回は「試験」を入力をします。検索キーワードを入力したら、検索ボタンを押下すると、検索結果がリストボックスに表示されます。

検索結果で任意の行をダブルクリックすると、対象行の図形(オートシェイプ)が選択された状態となります。

動作検証は以上となります。アドインで作成しているので、アドインがインストールされている限り、どんなブックでも呼び出し可能となります。

まとめ

今回は、図形(オートシェイプ)の文字を検索するアドインの紹介でした。

Point
  • 最初にアドインでメニューを作成しておくと、開発がやりやすい
  • アドインから呼び出す処理は、標準モジュールに記載する
  • 図形(オートシェイプ)の文字列検索は、「TextFrame2.TextRange.Text」を使う
  • 検索結果はリストボックスに表示
  • リストボックスのダブルクリックイベントで、図形(オートシェイプ)を選択する
  • 図形(オートシェイプ)選択処理は、Selectメソッドを使用する

少しでもお役に立てば、幸いです。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次