• ベストアンサー

エクセル:マクロを実行しているときの、めまぐるしい画面の動きを

マクロを実行しているとき、実際のアクティブシートで処理されている動きがディスプレイ上でめまぐるしく動きますが、 (1)例えば、マクロの実行中の間中、「しばらくお待ちください!」だけを表示したい。 (2)可能ならば、あと約何分で終了という表示をしたい。 せめて、(1)だけでもしたいのですが、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.3

>「処理中は"しばらくお待ちください!"と表示したシートをアクティブに」する方法を教えてください。 Sheet1とSheet2を用意して、Sheet2に "しばらくお待ちください!"と入力する。 ワードアートを貼り付けると目立ってよいかも。 標準モジュールに以下のコードを貼り付け、 Sheet1をアクティブにして実行して下さい。 Sub Sample3() Dim i As Integer Dim x As Double Dim s As String Sheets("Sheet2").Activate Application.ScreenUpdating = False Sheets("Sheet1").Activate For i = 1 To 10000 x = Int((i / 10000) * 100) s = Application.WorksheetFunction.Rept("■", x / 10) Application.StatusBar = x & "%進行" & s Cells(i, 1).Value = i Next Application.ScreenUpdating = True Application.StatusBar = False End Sub 「長い処理」の挿入どころですが、この場合なら For-Nextの間がそれに当たります。 1万回の繰り返しなので、 1回ループあたりの進行率を x = Int((i / 10000) * 100) で変数Xに代入 10個の■で100%とするため、 ワークシート関数REPTの2番目の引数の 繰り返し回数に10分の1にして与えています。

yastaro
質問者

お礼

ありがとうございました。 願い通りのものが完成できました。

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

その他の回答 (2)

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.2

(1)について 一番簡単なのは、「しばらくおまちください!」を ステータスバーに表示する方法だと思います。 Sub Macro() Application.StatusBar = "しばらくお待ちください!" Application.ScreenUpdating = False 長い処理 Application.ScreenUpdating = True Application.StatusBar = False End Sub これ以外にも処理中は"しばらくお待ちください!"と 表示したシートをアクティブにしておいたり、 ユーザーフォームに表示したりすることも出来ますが、 ステータスバーに表示が、お手軽だと思います。 (2)について こちらもステータスバーにプログレスバー風に 進行率を表示させるのはどうですか。 あと何分という表示はできませんが、 全体の何%進んだかを表示できます。 (1)の回答と組み合わせたサンプルです。 Sub Sample2() Dim i As Integer Dim x As Double Dim s As String Application.ScreenUpdating = False For i = 1 To 10000 x = Int((i / 10000) * 100) s = Application.WorksheetFunction.Rept("■", x / 10) Application.StatusBar = "しばらくお待ちください!" & x & "%進行" & s Cells(i, 1).Value = i Next Application.ScreenUpdating = True Application.StatusBar = False End Sub

yastaro
質問者

補足

ご回答感謝します。 (1)について、試してみました。ありがとうございます。成功です!! (2)について、進行率の表示はうれしいです。しかし、肝心のマクロ実行部分=「長い処理」の挿入どころをまちがえたのか、うまくいきませんでした。この点、お教えくださいますか? また、できれば、「処理中は"しばらくお待ちください!"と表示したシートをアクティブに」する方法を教えてください。画面が固まっていると勘違いする方のためによりわかり易くしたいのです。よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • odessa7
  • ベストアンサー率52% (101/192)
回答No.1

 ご要望とは少し違いますが、マクロ実行中の画面の動きをなくすだけなら Application.ScreenUpdating = False  を挿入することで、作業中の画面の更新がなくなり、最終結果のみが表示されます。作業時間も短縮されます。

yastaro
質問者

お礼

ご回答ありがとうございます。試してみました。処理がとても早くなりました。すごいすごい。どうもです。

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

関連するQ&A

  • EXCELマクロ実行中に

    EXCELのマクロを実行中にのみ「処理中…」などの表示を出させ、処理終了後に表示を消すということは可能でしょうか? ちなみにEXCELは2000です。

  • EXCELでマクロを初めて実行してみたんですがぁ・・・・

    初めてマクロというものをやってみました。 ただ、動作を記憶させただけです。プログラムは全然知りません。 sheet1の株価4本値と日付を1日だけ繰り上げる 単純な動きです。一番最後のセルにその日の 日付と4本値と入れて、マクロを実行させて、1日だけ繰り上げる 作業です。 それを、Sheet2が「=Sheet1!B2」このような形で参照するように してあるのですが、実行させると、 Sheet2B2のセルが#REF!とかなんとか表示されて B3からしか正しく表示されません。 以後同じことを繰り返すと、どんどん1つずつセルがエラーして 正しく表示されるセルが下がりながら、減っていってしまいます??? なぜなんでしょうか?? また回避策というか、正しい方法はありますでしょうか?? 何卒、初めてなので、わかりやすくお教えいただけると ありがたいです。 よろしくお願いを致します。

  • 非表示シートのマクロ実行

    マクロ処理をさせたいAシートを非表示にしてBシートにマクロボタンを置いて実行させたいのですが 非表示にすると実行できません。 Aシートは 計算処理を行い Bシートには 値だけを出したいので BシートからAシートのマクロ処理を実行したいと思っています。 非表示にしても別シートから実行出来る方法を教えてください。

  • エクセル-別のbookで同様のマクロ実行

    エクセル-別のbookで同様のマクロ実行 最初あるBook1に入っているmacro1はそのbook1のsheet1を処理するように作成しました。 次にBook1を開いたまま、Book2を開きそのsheet1に対してmacro1と同等の機能を実行したい場合は通常どうするのでしょうか。 (1) Book2にBook1のマクロをコピー (2) book2のマクロを開き、表示されるBOOK1 macro1を実行する。 (2) 場合でもうまくいくのでしょうか。Sheet1に対してやりたいことの論理は同じとします。試してみたらといわれそうですが、まず識者の説明をお聞きしたいのです。

  • マクロを実行すると画面があちこちに飛ぶ

    マクロを作ったのですが マクロの途中で他のシートやセルに移動するのですが、 最終的には元のセルに戻ってくるマクロです で、マクロを実行すると画面があちこちに飛びます 最初から最後までマクロを実行した画面で動かないようにしておくことは出来ないのでしょうか?

  • マイクロソフト・エクセル97(マクロ)

    マイクロソフト・エクセル97 sheet1上で作った『ユーザー入力フォーム(VB)』を sheet2からマクロの実行をしても、ユーザー入力フォームのデータがsheet2のものになっています。 sheet2からマクロを実行しても、きちんとsheet1のデータを反映させた(データ表示)いのですが、方法がわかりません。   sheets(sheet1).Select の記述をしてはみたのですが…。 とりあえず上の記述でうまくいくのですが、この方法でセーブし終了すると、『不正な処理をしたために…プログラムを強制的に終了します』が出てしまします。

  • エクセル2010 マクロを実行するボタンの作成

    エクセル2010で、 マクロを実行するボタンの作成方法か、初心者向けのサイトを教えてください。 やりたいことは、 シート1に入力した値が、シート2・3・4・・・の表に反映されて表示される。 (各シートの正しい位置に数値を反映させることは終了しました。) シート1に「シート2印刷」 「シート2印刷」・・・などのよなボタンを作り、ボタンを押すだけで、 シートの印刷を実行させたい。 です、宜しくお願い致します。

  • EXCELのマクロ実行トリガ

    お世話になります。 EXCELでマクロなどを作った時に、「マクロ」→「マクロの表示」→「実行」としなくても、シート上にスイッチの絵などを配置して、それをトリガにするのはどうするのでしょうか? 宜しくお願い致します。

  • エクセル:マクロ処理

    エクセルファイルにマクロを入れておき、あるボタンを押したらそのマクロが1回だけ実行される。 というようにしたい。 (質問)   ボタンは、どう作るか。コマンドで作るのか。   ボタン処理のところのマクロ記述はどんな感じのコードか。   このファイルを開いたときマクロを有効とするかは有効にするでいいんですよね。 (参考) ワークシート   ボタン1を表示しておく   マクロ   ボタン処理   実行処理 マクロend

  • マクロ実行後エクセルを閉じたい

    2つの別々のファイルを開いて片方からもう片方にコピーして 保存して終了する。(両方とも閉じる) というマクロを作ったのですが コピー終了後に実行したマクロ付きのエクセルも閉じてデスクトップ上には何も開いていない状態にしたいのですがworkbookのところに 下記の命令を記述してもうまくいきません。 Application.Run "XXXXXX" ThisWorkbook.Save ThisWorkbook.Saved = True If Workbooks.Count <= 1 Then Application.Quit ThisWorkbook.Close False マクロ付きのエクセルも一旦は閉じるのですがその後に 別の白紙のブックが開いてしまうのです。 続けて他のマクロをスケジュールで実行したいのですが実行時に 「既にエクセルが開いています」みたいな警告が表示され 実行できません。 エクセルを完全に閉じるようにするにはどうしたらいいのでしょうか?

専門家に質問してみよう