まとめ
Excelで検索をかけるとき、たいてい「ブック」全体に対して「値」を検索することが多い。しかし起動する度にこれらデフォルト設定が、「シート」かつ「数式」に戻ってしまう。これらのデフォルト値を任意の選択に変更するのは難しそう。このため、苦肉の策で、Excelファイル起動毎に主に自動キーストロークにより「ブック」かつ「値」に変更する、という一連のマクロ作ってみた。
困ったこと
Excelで検索をかけることが多い。この時ほとんどの場合、「ブック」全体に対して「値」を検索したい。
しかし検索ダイアログ内のこれらのデフォルト設定は、「検索場所」は「シート」で「検索対象」は「数式」になっている。このため、ブック全体から特定の値を検索するには、都度これらを「ブック」かつ「値」に変更する必要がある。
一度これらを変更すれば、Excelが起動している間は設定が残っている。しかし、Excel を終了させて開き直すと、これらはまた「シート」かつ「数式」に戻ってしまう。
なので、Excelファイルを起動して検索をかけたい度にいちいち「ブック」かつ「値」に変更している。これが地味に面倒だ。

必ず「シート」と「数式」に戻ってしまう検索ダイアログ
環境
- OS:
Windows 11 Pro バージョン 25H2 - 対象のアプリケーション:
Microsoft Excel for Microsoft 365 MSO (バージョン 2602 ビルド 16.0.19725.20126) 64 ビット
やったこと
試行錯誤の結果、PERSONAL.XLSX の ThisWorkbook モジュールのイベントプロシージャからトリガーされ、Excel の起動が落ち着いたら検索ダイアログを開いてそこで「ブック」かつ「値」を選択するような一連のキーストロークを行う、という一連のVBAマクロを作成した。
仕込んだ手順
PERSONAL.XLSX を開く
もしこのファイルが存在しなければ、Excelで一度「個人用マクロブック」にマクロを記録するなどして、用意する。
Excel起動完了検知モジュール作成
VBEで新規の標準モジュールの中に、Excel の起動の動作が落ち着いたことを検知するという動作を行うファンクションプロシージャを置いた。
これが必要な理由は、後に述べるVBAによるキーストロークを行うタイミングがExcelの起動動作が落ち着いてからでないと正しく動作しないので。
コード
ちなみにその時の流れとしては、Claude Opus 4.6 に「Excel VBA で、Excel の起動が完全に終わって落ち着いたことを検知するコードを書いてください。」と頼んだところ、複数の候補コードの一つとして「アドインの読み込み、COMオブジェクトの初期化、計算エンジンの安定など、すべてが落ち着いたことを確認」するファンクションプロシージャのコードを作ってくれた。
検索ダイアログを開いて「ブック」かつ「値」に変更するための自動キーストロークを行うプロシージャを作成
VBEで上記とは別の新規の標準モジュールの中に、検索ダイアログを開いて「ブック」かつ「値」に変更するための自動キーストロークを行うプロシージャを作成した。
コード
Option Explicit
Sub SetSearchOptionsToWorkbookValues()
'「検索ダイアログ」を表示させる。
Application.CommandBars.ExecuteMso "FindDialogExcel"
'環境によっては以下も必要かも。[オプション]を開くキー操作
'Application.SendKeys "%t"
'ドロップダウンリスト「検索場所」を「ブック」にするという一連のキー操作
Application.SendKeys "%h"
Application.SendKeys "{DOWN}"
Application.SendKeys "{ENTER}"
'ドロップダウンリスト「検索対象」を「値」にしてから検索ダイアログを閉じるという一連のキー操作
Application.SendKeys "%l"
Application.SendKeys "{DOWN}"
Application.SendKeys "{ENTER}"
Application.SendKeys "{ESC}"
End Sub
上記2つのプロシージャがExcel起動時に自動的に動くようにする
コード
Option Explicit
Private Sub Workbook_Open()
If WaitForExcelReady() Then
Debug.Print "Excel は完全に起動しました。処理を開始します。"
Call SetSearchOptionsToWorkbookValues
Else
MsgBox "Excel の起動がタイムアウトしました。", vbExclamation
End If
End Sub
結果
Excelファイルを起動する度に、起動直後に検索ダイアログが一瞬表示され、「ブック」と「値」に変更されるようになった。
これにより、Ctrl + F で検索をかける際、いちいち「ブック」と「値」に変えなくてもよくなった。
デフォルト値の疑似的な変更と言えるかも。
注意点
- Excelファイルをダブルクリックするなどして、Excelを起動すると同時にExcelファイルを開くという時でないと、効果がない。
例えば、Excelを素で起動してからファイルを呼びだす、というやり方には対応していない。 - この一連のマクロをExcel起動中に手動等で再度実行してしまうと、検索ダイアログの中の設定が意図したものとは変わってきてしまう。

