プロが教えるわが家の防犯対策術!

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

A 回答 (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
    • good
    • 0

a88さん、こんにちわ。



a88さんのおっしゃっている検索ダイアログとは、Excel2002から追加になったものと存じます。
また、コード内に記述したダイアログ定数 xlDialogFormulaFind はそれ以前のものです。
従って、xlDialogFormulaFindに何かしらのオプションを加えることで「すべて検索」を
表示させることはできないと思います。
Excel2002から追加になった検索ダイアログは、ダイアログを表示させながらシート操作ができる
「モードレスダイアログ」というものですが、どうやらDialogsの引数には存在しないようですね。

Excel2000(モードレス検索ダイアログの無いバージョン)からExcel2002(あるバージョン)に
上がった際に、VBAのメインバージョンが上がっていない(共にVer.6.xx)ことから考えると
VBAから件のダイアログを表示させるのは難しいと思うのですが。
(ちょっとWebで調べてみたところでは存在しませんでした。)

モードレスのユーザーフォームを作成し、御自分で同様な機能を持つものを作成するしかないかも
知れません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/10/21 16:33

こんにちは。



最初に、基本的なことなのですが、

>'検索ウインドウを開いて検索を実行
>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 で分りますから、解除できます。

この回答への補足

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

補足日時:2005/10/21 16:52
    • good
    • 0

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