検索を連続して実行するマクロ


コメントにて以下のご要望をいただきました。


Outlook2010でメールを検索するときにいつも次のような使い方をしていますが、もう少し効率よくできないものかと思っています。
下記手順のうちc)~f)をマクロで簡単にできないでしょうか?
あるいは、最悪、c)とd)の所だけでもショートカットキーで一発で検索ダイアログボックスが出せるようになるとうれしいのですが。
ご教示いただきたく、よろしくお願いいたします。

a) クイック検索でメール本文に”xyz”という文字列を含むメールを検索
b) 検索で見つかった一番上のメールを選択
c) Ctrl+Gで「検索と置換」ダイアログボックスを表示
d) 「検索」タブに切り替えて”xyz”という文字列を検索
e) そのメールの最後まで検索したら、次のメールを選択
f) c)~e)を繰り返す



Outlook では Explorer で次のメールを選択するという方法が用意されていないため完全に自動化はできなかったのですが、マクロを使用して以下のような手順にはできます。

  1. SearchStart マクロを実行し、検索文字列を入力すると Outlook で検索が行われる
  2. 検索結果のメールのうち一つを選択すると、そのメールに含まれる文字列を自動的に検索する
  3. SearchNext マクロを実行すると、同じメール本文の中をさらに検索する
  4. メールの最後まで検索したら、手動で別のメールを選択すると 2. の状態になる
  5. 検索を終了するときには SearchStop マクロを実行する

上記を実現するマクロは以下のようになります。 SearchStart、SearchNext、SearchStop をクイック アクセス ツールバーに登録しておけばより便利になると思います。

' ここをトリプルクリックでマクロ全体を選択できます。
Dim WithEvents myExplorer As Explorer
Dim mySearchWord As String
Dim myFind As Object
'
' 検索を開始するマクロ
Public Sub StartSearch()
    mySearchWord = InputBox("検索文字列:")
    Set myExplorer = ActiveExplorer
    myExplorer.Search mySearchWord, olSearchScopeCurrentFolder
End Sub
'
' 次の文字列を検索するマクロ
Public Sub NextSearch()
    If Not myFind Is Nothing Then
        myFind.Execute
    End If
End Sub
'
' 検索を終了するマクロ
Public Sub StopSearch()
    myExplorer.ClearSearch
    Set myExplorer = Nothing
    Set myFind = Nothing
End Sub
'
' 検索結果のアイテムをクリックした際に発生するイベントで本文検索開始
Private Sub myExplorer_SelectionChange()
    On Error Resume Next
    Dim objWord As Object
    If myExplorer.Selection.Count = 0 Then
        Exit Sub
    End If
    Set objWord = myExplorer.Selection(1).GetInspector().WordEditor
    DoEvents
    Set myFind = objWord.Parent.Selection.Find
    With myFind
        .ClearFormatting
        .Text = mySearchWord
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .MatchFuzzy = True
        .Execute
    End With
End Sub
'
' フォルダーが切り替わったら検索を終了させるための記述
Private Sub myExplorer_FolderSwitch()
    StopSearch
End Sub

マクロの登録方法やメニューへの追加について

検索を連続して実行するマクロ」への1件のフィードバック

  1. いただいたマクロでサーチ範囲をCurrentFolderからAllFoldersに変えて、フォルダーが切り替わったら検索を終了させる処理を無効にして試してみました。すばらしいです。
    お願いしたのが1年前でしたのでほぼあきらめていましたが、このような素晴らしいマクロを作っていただき大変感謝しています。
    SearchNextマクロの代わりにスペースキーでも次の検索ワードや次のメールに飛ぶので大変使いやすいです。検索ワードがメール中になくなると通常のページ送りになりますが、それでも本文の最後まで行くと次のメールに自動的に移るので格段に検索スピードが上がりました。どうもありがとうございました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中