• ベストアンサー

エクセル「検索と置換」の表示を消すマクロ

エクセルの「検索と置換」を Application.Dialogs(xlDialogFormulaFind).Show で出現させて検索の作業をしています。 作業後に「検索と置換」の画面をマクロで消したいのですが どのようなコードになるでしょうか。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 > エクセルの「検索と置換」を > Application.Dialogs(xlDialogFormulaFind).Show > で出現させて検索の作業をしています。 > 作業後に「検索と置換」の画面をマクロで消したいのですが > どのようなコードになるでしょうか。 問題解決の肝は、 何故or何の為に、「検索と置換」ダイアログを表示させる必要があるのか、 ということになると思いますが、 この点をうまく説明できないでいることも、 解決の糸口を見つけられないでいる原因のようですね。 > 「検索と置換」の画面をマクロで消したい 結論からいうと、残念ながら、そういう機能は用意されていません。 それはExcelやVBAの仕様がどうこうとかいう次元ではなくて、 目的に適ったツール選びが出来ていないのだと思います。 ダイアログというのは概ね、制御を占有して、 ユーザー(の手作業による)操作に応じて、実行したり閉じたりするものです。 制御を占有している、ということは、一連のユーザー(の手作業による)操作 が終って、ダイアログが閉じるまでは、 他の操作やコマンドを割り込んで実行することは出来ない、 ということを意味します。 例えば、 Sub test()   ' ' 前処理   Application.Dialogs(xlDialogFormulaFind).Show   ' ' 後処理 End Sub ↑このプロシージャを実行すると、 "前処理"を実行し「検索と置換」ダイアログを表示しますが、 ユーザー(の手作業による)操作によってダイアログが閉じるまでは "後処理"を実行することは出来ません。 割り込むことが出来ないのは、何もVBAに限った話ではなくて、 「検索と置換」ダイアログを表示している間は、 Excelアプリケーション全体について何も操作出来ませんよね? 例えば、セル範囲を選択する、なんて簡単なことでさえ、出来ないのですから。 なので、もう一度、何をしたいのか、整理した上で、 「検索と置換」ダイアログを表示する以外の手段を検討してみて下さい。 普通に考えると、range.Find メソッド や range.Replace メソッド 等で 対応することになるかと思います。 ダイアログを表示したかった理由が、 ユーザーインターフェイス的なものを求めている、ということだったとすれば、  ・シート上に配置するテキストボックス  ・ユーザーフォーム+テキストボックス  ・application.InputBox 等々、制御を占有することのない(つまり閉じるコマンドを受け取れる) インターフェイスを準備することは可能です。 ここで想定した以外の目的、なのかも知れませんが、 ExcelやVBAの既存の機能を組み合わせていけば、 大抵の要求には応えられるようになっているでしょう。 部分的な方法論というより、全体を俯瞰的に見渡して、 どのようなツールが適しているのか選択することから再検討ですね。 十分な情報が追加されるようであれば、こちらでも検討・アドバイスすることは可能です。 "無いものは作ってしまえ"的に、ダイアログを閉じるようなことは、 出来なくもないかな?と思いますが、それにしても、 いつ閉じるのか、 という(タイミングを取る)トリガーとして何かボタンを押すことになるぐらいなら、 最初から[閉じる]ボタンを押せばいい訳ですから、 "いつ"ダイアログを閉じるのか、とか、 5W1H的な説明をまず、ご自分の中で整理してみたらいいと思います。 例えば、「Enterキーを押したら、閉じる」みたいな要求なら、 シート上やユーザーフォーム上のテキストボックス がお奨め、とか、具体的なニーズに副ったアドバイスなら出来るかも、です。

fukuzawakamon
質問者

お礼

cj_ mover様 ご回答ありがとうございます。 「何故or何の為に、「検索と置換」ダイアログを表示させる必要があるのか」 を考え、改めてお聞きさせていただきます。 ご丁寧にありがとうございました。