dポイントプレゼントキャンペーン実施中!

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

宜しくお願いいたします。

A 回答 (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キーを押したら、閉じる」みたいな要求なら、
シート上やユーザーフォーム上のテキストボックス
がお奨め、とか、具体的なニーズに副ったアドバイスなら出来るかも、です。
    • good
    • 0
この回答へのお礼

cj_ mover様

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

ご丁寧にありがとうございました。

お礼日時:2014/09/26 18:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!