- ベストアンサー
エクセルマクロの質問
先程質問させて頂いて、早々にご回答を頂き、問題は解決したのですが、また新たに問題が出たので質問します。 5枚のシートを選択して、そこから検索したいのですが、マクロの実行で検索のダイアログを表示させるまではできたのですが、いざ値を入力をすると「値がありません。」とメッセージがでます。マクロの実行ではなく、手作業で(シート選択まではマクロ)検索→値の入力をすると、検索ができるのですが、、、どうしてこうなるのでしょうか。教えて下さい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >どうしてこうなるのでしょうか。教えて下さい。 というご質問と、解決したいというご質問では、かなり解答の質的に異なるかと思います。 出来ない理由は、おそらくは、Excelのワークシートから実行されるコマンドは、VBAとは別の経由を持って命令される、としか言いようがありません。 細かく挙動を観察すると、ワークシートからの命令は、検索データなどを、一旦何かフィルタで選別してから、実際の検索のプログラムに与えているように見受けられます。ユーザーの利便性を図ってとは思うものの、それをVBA側からは操作は、かなり難しいものではないかと思います。 いずれにしても、VBAからのダイアログの立ち上げは、ワークシート上のコマンドとは、必ずしも同じ働きとは言えません。 ただ、前のご質問と合わせて言わせて、少しコメントさせていただくとするなら、ご質問の内容は、マクロ(自動作業)として、結果の目的を持たず、ダイアログの立ち上げでは、実質的には、あまり意味のあるものではないのです。 単に、自動起動するものは、ショートカットに過ぎないです。しかし、それは、ある程度、Excelの操作に慣れるにしたがって、特に、このような検索や置換は、すでにショートカット(Ctrl + f) が装備されていますから、なるべく、VBAには頼らずに、すばやく行えるようにしたほうがよいのではないか、と私は思います。また、次バージョンなどで解決しているものですから、あまり、そういう点で支障を感じられるようでしたら、Version Up したほうがよいのではないか、と私は思います。 'なるべく標準モジュールがよいです。 '必ず、ワークシート内から行ってください。Visual Basic Editor ないから実行しないでください。 Sub FindAll() Dim i As Integer Dim LastNum As Integer If Worksheets.Count >= 5 Then LastNum = 5 Else LastNum = Worksheets.Count For i = 1 To LastNum Worksheets(i).Select False Next Application.SendKeys "^f" End Sub
お礼
細かいご回答ありがとうございました。なるほどよくわかりました(^-^)お礼が遅れて申し訳ありませんでした。