• 締切済み

エクセル 複数シート検索のマクロ

以前、下記の質問をさせてもらい ---- 以下 --------------- エクセルの文字列検索で、複数シートにまたがった場合のマクロ記述を知りたいです。 シートaとシートbの選択は下記となると思いますが、 Sub Macro1() Sheets(Array("a", "b")).Select Sheets("a").Activate End Sub その後で、検索窓([ctrl]+[f])を表示させたいのですが・・・。 ---- 以上 --------------- に対して、以下のご回答を受けたのですが、 Sub TEST01() Sheets(Array("a", "b")).Select Cells.Select Application.Dialogs(xlDialogFormulaFind).Show End Sub うまく行く場合もあるのですが(と思い解決で締め切ってしまいました)、大抵の場合(該当文字列が複数あるとき?)にフリーズしてしまいます。 上記マクロだと、「検索する文字列」タイトルで[次を検索][閉じる][置換]ボタンが表示され(古いOffice?)、 マクロを使用しない通常の[ctrl]+[f]だと、「検索と置換」タイトルで[検索]と[置換]タグが表示されます(Office2003)。 また、マクロを実行した後は通常の[ctrl]+[f]、[編集]-[検索]が効かなくなってしまいます。 この部分はフリーズとは無関係かもしれませんが・・・。 フリーズしないマクロの記述と、出来れば検索終了後に特定のシートに戻るようなマクロも追加したいです。 また、別件になりますが、ファイルを開いた時に必ず特定のシートに位置づけられる事ができればそれもご教授願いたいです。

みんなの回答

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

#4 です。 >他の方のアドバイスもいただいていますが、フリーズは解消できないです・・・。 フリーズの原因はさまざまです。 バイナリエディタで、その原因は見つけることは出来ても、その原因を取り除くのは、16進コードを直接読めるレベルでないと分かりません。 まず、Excel自体にエラーが発生するか試してみてください。 Ctrl キーを押しながら、スタートから起動して、セーブモードで立ち上げて、そのブックのマクロがフリーズするか検査してみます。(バージョンによっては、ファイル名を指定して実行 Excel.Exe /s で起動します) もし、それでフリーズが発生するなら、Excel??.xlb ファイルや PERSONAL.XLS などを、必要事項だけをバックアップを取るか、他の場所に移してから、これらを削除します。[?は、数字の意味] また、個々のブックが壊れているようでしたら、新規にブックを作ってあげます。 そういう場合、ブックをコピーするのではなく、新しくブックに、Cells.Copy もしくは、Ctrl + A -> Copy などで、表面的にコピーして、新しいシートに移してあげるのがよいのではないかと思います。 その上で必要なら、アプリケーションの修復やアプリケーションの再インストールをします。 ちなみに、私の対策は、簡単な説明ですが、やはりバックアップを取っています。起動する直後に、Excelのコマンドではなく、外部コマンドでファイル・バックアップを取りますから、異物の混入する可能性が極めて少ないです。なんらかのエラーを起こした場合は、使用していたブックは、捨てるようにします。そうすると、長い期間ブックはトラブルを起こさずに使えます。最近の質問者さんでも、同様の方がいらっしゃって、マクロを紹介しました。(No.3112115)

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

こんにちは。 >また、マクロを実行した後は通常の[ctrl]+[f]、[編集]-[検索]が効かなくなってしまいます。 それは、たぶん、Excelのバグのひとつだと思います。旧メニューと新メニューでコンフリクトを起こしているのだと思います。なお、フリーズの原因は分かりません。何かの地雷原を踏んでいる可能性はあるかもしれません。 Dialogs で検索した後に、検索コマンドが利かなくなったら、 ActiveSheet.Cells.Find "" のダミーを使ってください。そうすれば、リセットされます。 '---------------------------------------------------- Sub FindMenuShowing()  Sheets(Array("a", "b")).Select  If Val(Application.Version) > 10 Then 'Excel 2003 の場合    Application.CommandBars.FindControl(, 1849).Execute  Else    Cells.Select    Application.Dialogs(xlDialogFormulaFind).Show    '戻り値は、どうもTrue のようですね。  End If  Sheets("a").Select End Sub

ogaki_3ok
質問者

補足

ありがとうございます。 他の方のアドバイスもいただいていますが、フリーズは解消できないです・・・。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

横からすみません。Office2003で質問にあるマクロを動かしてみたら確かに異常終了しました。(私のPCではフリーズではありませんが) Sub TEST01() Sheets(Array("a", "b")).Select res = Application.Dialogs(xlDialogFormulaFind).Show End Sub ちょっと試して戻り値を取るようにしたら起きないようになりました。 自信はありませんが試して損はないでしょう

ogaki_3ok
質問者

補足

ありがとうございます。 ご指摘の記述と(res = )してみましたが、症状は同じでした・・・。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

今、てもとに2003がないので苦肉の策です。 マクロで直接[ctrl]+[f]をやってみます。これで2003なら2003の検索が出るはずです。どうでしょうか? Sub TEST03() Sheets(Array("a", "b")).Select Sheets("a").Activate Cells.Select SendKeys "^f", True '[ctrl]+[f]をキーに送る Sheets("a").Select '終了後aに戻る End Sub

ogaki_3ok
質問者

補足

ありがとうございます。 SendKeys "^f", True '[ctrl]+[f]をキーに送る で、2003の検索ウインドとなりましたが、 今度はシート"a""b"が対象とならず、アクティブシートも"a"でなくなってしまいました。m(__)m

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

前回答えたものです。わたしのは2000だったのでうまく行かなかったのかも知れません。「検索と置換」表示なら以下を試してみてください。 Sub TEST02() Sheets(Array("a", "b")).Select Sheets("a").Activate Cells.Select Application.Dialogs(xlDialogFormulaReplace).Show '「検索と置換」表示 Sheets("a").Select '終了後aに戻る End Sub > ファイルを開いた時に必ず特定のシートに位置づけられる事ができればそれも 標準モジュールではなくThisWorkBookに、 Private Sub Workbook_Open() Sheets("a").Activate End Sub ではどうでしょう?

ogaki_3ok
質問者

補足

早々にありがとうございます。 書いたように当初はうまくできたと思い締め切ってしまいました。 ご指摘の記述をしたところ、今度は「置換」表示になりました。 恐らく2000バージョン時の表示だと思います。 2003ですと、「検索・置換」ウインドでその中でそれぞれのタグが表示されます。 たぶんこれはフリーズには関係ないであろうと思いますので結構ですが、症状としては、 ・マクロ実行で検索ウインドより文字列指定します。 ・該当文字列が複数あると思われる場合は、[次を検索]を押して行きますが、(たぶん)該当する最後の文字列の後で[次を検索]を押すとフリーズしてしまいます。 何度も申し訳ありませんが、よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう