【パワポ検索ツールを作る2】ForEach


プレゼンテーション検索

 前回はボタンをクリックすると動作するクリックイベントについて解説しました(前回の記事)。今回は検索のアルゴリズム(仕組み)作りとしてFor Eachの使い方について解説します。For Eachとは一言で言うとループです(ループがよく分からない方はこちらをご覧ください)。特徴はFor文の様にループの回数を指定する必要はありません。まずはワード検索のアルゴリズムとしてパワポの資料、つまりプレゼンテーションを検索する為のコードを書き、パワポのファイルをいくつか開いて実行してみましょう。

Option Explicit

Sub forEachTest()
    Dim prs As Presentation  'プレゼンテーション

    For Each prs In Presentations
        MsgBox prs.Name  'パワポのファイル名表示
    Next
End Sub

開いているパワポのファイル名が表示されたと思います。今度はファイル内の全スライドを検索するアルゴリズムを作ります。スライドを2,3個追加して実行してみましょう。

スライド検索追加

Sub forEachTest()
    Dim prs As Presentation  'プレゼンテーション
    Dim sld As Slide    'スライド
    
    For Each prs In Presentations
        MsgBox prs.Name  'パワポのファイル名表示
        For Each sld In prs.Slides
            MsgBox sld.Name  'スライド名表示
        Next
    Next
End Sub

 パワポのファイル名が表示された後にSlide**と順に表示されたと思います(順不同の時もある)。そして更にもう一つシェイプ(図形)を検索するループも加えます。テキストボックスや四角などの図形を2,3個置いて実行してみましょう。

シェイプ検索追加

Sub forEachTest()
    Dim prs As Presentation  'プレゼンテーション
    Dim sld As Slide    'スライド
    Dim shp As Shape    'シェイプ
    
    For Each prs In Presentations
        MsgBox prs.Name  'パワポのファイル名表示
        For Each sld In prs.Slides
            MsgBox sld.Name  'スライド名表示
            For Each shp In sld.Shapes
                MsgBox shp.Name  'シェイプ名表示
            Next
        Next
    Next
End Sub

パワポのファイル名 → スライド名 → 全シェイプ名 → 次のスライド名 → 全シェイプ名 → 次のスライドが無ければ次のパワポのファイルという順でループしていきます。
 構成はループの中にループ、その中にまたループと3次元ループとなっており複雑に感じるかもしれませんが順番を把握すれば意外とシンプルです。このようにループ内にループがある場合、Nextに来たらどこに戻るか間違えないようにしましょう。サンプルコードの様にFor Eachと対応するNextの列を揃えると分かりやすいと思います。次回はFind関数を使ってワード検索を実装していきます。


コメントを残す