こんにちは、ユーキです。
今回は、図形(オートシェイプ)の文字を検索する機能をアドインで作成したいと思います。
作成する機能
作成する機能は、以下になります。
- フォームで検索キーワードを入力
- 入力したキーワードを含む図形(オートシェイプ)の文字を検索
- 検索結果はフォームのリストボックスに表示
- リストボックスをクリックすると、該当する図形(オートシェイプ)を選択
- アドインで作成し、どんなブックでも実行可能とする
図形(オートシェイプ)の文字を検索するアドインの作成
それでは、早速アドインを作っていきましょう。
アドイン作成
まずは、アドインファイルを作成します。
アドイン用メニューの作成
作成するアドインには、処理を呼び出す部品が必要になります。まずは、EXCELのメニューバーにアドイン用メニューを追加する処理を実装しましょう。
EXCELのメニューバーにアドイン用メニューを追加しておけば、開発(デバッグ)がやりやすくなります。
以下の記事を参考にして、インストール時、アンインストール時にメニューを追加、削除される機能を実装しましょう。
処理は、ThisWorkbookに記述します。
'-----------------------------------------------------------
'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」としました。
作成したアドインをインストールする
作成したアドインをインストールしましょう。
インストールの方法は、以下の記事を参考にしてください。
検索キーワードを入力するフォームの作成
アドインができたら、次は検索キーワードを入力するフォームの作成です。
フォームの作成
フォームの作成は、以下の記事を参考にします。
テキストボックスとコマンドボタン、リストボックスを配置した画面を作成します。
変更したプロパティは以下になります。
- フォーム
- 名前:frmSearchShape
- テキストボックス
- 名前:txtKeyword
- コマンドボックス
- 名前:btnSearch
- Caption:検索
- リストボックス
- 名前:lstResult
- ColumnCount:3
アドインから作成したフォームを呼び出す
作成したアドインからフォームを呼び出せるようにします。この処理は、標準モジュールに記述をします。
Public Sub searchShapeText()
frmSearchShape.Show
End Sub
検索処理の実装
それでは、メインの機能を実装しましょう。図形(オートシェイプ)の文字を検索する処理は以下の記事を参考にします。
検索結果をリストボックスに表示する処理は、以下の記事を参考にします。
検索結果はリストボックスに表示をするようにします。この後、選択できるようにするため、シート名、図形(オートシェイプ)名もリストボックスに表示するようにします。
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アドインを選択すると、メニューが展開されます。表示されたメニューから「オートシェイプ検索」を選択すると、作成したユーザーフォームが表示されます。
表示されたユーザーフォームのテキストボックスに検索したキーワードを入力します。今回は「試験」を入力をします。検索キーワードを入力したら、検索ボタンを押下すると、検索結果がリストボックスに表示されます。
検索結果で任意の行をダブルクリックすると、対象行の図形(オートシェイプ)が選択された状態となります。
動作検証は以上となります。アドインで作成しているので、アドインがインストールされている限り、どんなブックでも呼び出し可能となります。
まとめ
今回は、図形(オートシェイプ)の文字を検索するアドインの紹介でした。
- 最初にアドインでメニューを作成しておくと、開発がやりやすい
- アドインから呼び出す処理は、標準モジュールに記載する
- 図形(オートシェイプ)の文字列検索は、「TextFrame2.TextRange.Text」を使う
- 検索結果はリストボックスに表示
- リストボックスのダブルクリックイベントで、図形(オートシェイプ)を選択する
- 図形(オートシェイプ)選択処理は、Selectメソッドを使用する
少しでもお役に立てば、幸いです。