• 締切済み

Excel VBA組み込みダイアログボックス

Excel2002で、あるセルに入力した文字列をキーワードに、複数のワークシートを検索、検索結果表示を「編集」-「検索」-「すべて検索」をクリックしたように一覧表示したい。 組み込みダイアログボックスを使い、VBAを次のように記述しましたが、表示されるウィンドウに「すべて検索」の表示は無く、「次を検索」しかできません。 組み込みダイアログボックスの引数に何か指定すれば「すべて検索」が可能になるのでしょうか? それとも、組み込みダイアログボックスを使うことが間違っているのでしょうか? よろしくお願いします。 Public Sub Kensaku() '変数の宣言 Dim strKeywords As String Dim vntShar As Variant '検索したい文字列を変数Keywordsに取得 strKeywords = Range("B4").Value '左から2番目、3番目、4番目のワークシートを選択 vntShar = Array(2, 3, 4) Sheets(vntShar).Select '検索ウインドウを開いて検索を実行 Application.Dialogs(xlDialogFormulaFind).Show (strKeywords) End Sub

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 返事が遅くなりました。 >キーワードは、Sheet1のB4セルでは駄目なのでしょうか? うまく行きませんでしたか? ちょっと気になるのは、  strKeywords = Range("B4").Value ここは、シート名が入っていませんが、本当によいのでしょうか? 通常は、ボタンがあるところですが、コードがちょっと不安ですね。  strKeywords = Worksheets("Sheet1").Range("B4").Value と明示的に、指定して、もう一度#1のコードを試してください。 次に、それがダメでしたら、外部から送ることにします。 Sub TestSample2()   Dim strKeywords As String   Dim vntShar As Variant   vntShar = Array("Sheet2", "Sheet3","Sheet4")   Sheets(vntShar).Select   strKeywords = Sheet1.Range("B4").Value   SendKeys "^f"   CreateObject("Wscript.Shell").SendKeys strKeywords   CreateObject("Wscript.Shell").SendKeys "{Enter}" End Sub

すると、全ての回答が全文表示されます。
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.2

a88さん、こんにちわ。 a88さんのおっしゃっている検索ダイアログとは、Excel2002から追加になったものと存じます。 また、コード内に記述したダイアログ定数 xlDialogFormulaFind はそれ以前のものです。 従って、xlDialogFormulaFindに何かしらのオプションを加えることで「すべて検索」を 表示させることはできないと思います。 Excel2002から追加になった検索ダイアログは、ダイアログを表示させながらシート操作ができる 「モードレスダイアログ」というものですが、どうやらDialogsの引数には存在しないようですね。 Excel2000(モードレス検索ダイアログの無いバージョン)からExcel2002(あるバージョン)に 上がった際に、VBAのメインバージョンが上がっていない(共にVer.6.xx)ことから考えると VBAから件のダイアログを表示させるのは難しいと思うのですが。 (ちょっとWebで調べてみたところでは存在しませんでした。) モードレスのユーザーフォームを作成し、御自分で同様な機能を持つものを作成するしかないかも 知れません。

a88
質問者

お礼

matsu_jun さん 検索ダイアログボックスで「すべて検索」は無理だとわかりました。ありがとうございます。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 最初に、基本的なことなのですが、 >'検索ウインドウを開いて検索を実行 >Application.Dialogs(xlDialogFormulaFind).Show (strKeywords) >End Sub これでは、VBAが終われないのではありませんか? 検索ができるようには思えません。この先をどうするか、ということだと思います。 >vntShar = Array(2, 3, 4) >Sheets(vntShar).Select それから、これは出来ますか?Sheets のIndex に配列は利かないように思いますが? 最後に、 Public Sub Kensaku() どうして、Public ステートメントが必要なのですか?標準モジュールに書けば、規定値としてPublicプロシージャなのですけれども。 サンプルを考えてみました。ボタンなどにマクロを取り付けてください。なお、検索で見つからなかったときは、メッセージをはきだして、検索ダイアログ自体の有効性を失います。 Sub TestSample()   Dim strKeywords As String   Dim vntShar As Variant   vntShar = Array("Sheet2", "Sheet3","Sheet4")   Sheets(vntShar).Select   strKeywords = Range("B4").Value   SendKeys "^f"   SendKeys strKeywords End Sub 通常は、このようなマクロは作りません。Findメソッドを使います。Findメソッドは、戻り値が、オブジェクトなので、オブジェクトのあるなしは、Nothing で分りますから、解除できます。

a88
質問者

補足

Wendy02さん 早速の回答ありがとうございます。 初心者の為、めちゃくちゃな質問をしていたようで、すみません。 サンプルのマクロで、SendKeysの存在を知りました。 このサンプルを使いたいのですが、どうもキーワードの選択がうまくいきません。 キーワードは、Sheet1のB4セルでは駄目なのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A