- ベストアンサー
エクセルマクロの質問
マクロで検索したいシートに移動して、検索のダイアログを表示するまでさせたいのですが、どうすればいいのでしょうか。教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 > 5枚のシートを選択して、そこから検索したいのですが... Application.Dialogs(xlDialogFormulaFind).Show で表示されるのは、Excel2000 までの古い検索ダイアログですね... よく覚えてないですけど、古いタイプのでは不可能だったような? これは、新タイプの検索ダイアログの話ですよね? 残念ながら Application.Dialogs からでは開けませんが、工夫しだいで VBA からこのダイアログを表示することは可能です。簡単に言えば、 Application.CommandBars.FindControl(ID:=1849).Execute この一行だけです。が、、これだけだと手作業で [Ctrl]+[F] とするとか、 SendKeys した方が早いので、折角 VBA を使うのですから、それなりに自動 化してみます。 Sub Sample() ' Excel 2002 以降の新しい検索ダイアログを表示して、[すべて検索]を ' VBA から実行する Dim rngDummy As Range Dim strKeyword As String Dim aryShNamse As Variant aryShNamse = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5") strKeyword = "1" '検索語をここに入れる" ' ダイアログに設定できるものは予めダミーで Find メソッド ' を実行することで設定しておく On Error Resume Next Set rngDummy = Sheet1.Range("A1").Find( _ What:=strKeyword, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchByte:=False) Set rngDummy = Nothing On Error GoTo 0 ' 複数のシートを選択し、作業グループにする Worksheets(aryShNamse).Select ' Excel メニュー[編集]-[検索]のメニューボタンを実行 ' これで Excel2002移行の新しい[検索]ダイアログが表示 ' されます Application.CommandBars.FindControl(ID:=1849).Execute ' あとはユーザーに任せてもよし、VBA で検索まで実行させ ' たいなら SendKeys で逃げる ' 検索ダイアログの[すべて検索]ボタンは [Alt]+[I]キー SendKeys "%I" End Sub
その他の回答 (2)
- zap35
- ベストアンサー率44% (1383/3079)
Sub Macro5() Worksheets("シート名").Activate Application.Dialogs(xlDialogFormulaFind).Show End Sub では?
お礼
早々のご回答ありがとうございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
Sheets("シート名").Activate Application.Dialogs(xlDialogFormulaFind).Show
補足
早々のご回答有難うございました。 早速やってみたところ、出来ました。ただ・・5枚のシートを選択して、そこから検索したいのですが、マクロの実行から検索のダイアログを表示させ、値の入力をすると「値がありません。」とメッセージがでます。マクロの実行ではなく、手作業でシート選択→検索→値の入力をすると、検索ができるのですが、、、どうしてこうなるのでしょうか。教えて下さい。
お礼
大変詳しいご回答有難うございました。