アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロを実行しているとき、実際のアクティブシートで処理されている動きがディスプレイ上でめまぐるしく動きますが、

(1)例えば、マクロの実行中の間中、「しばらくお待ちください!」だけを表示したい。

(2)可能ならば、あと約何分で終了という表示をしたい。

せめて、(1)だけでもしたいのですが、お願いします。

A 回答 (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にして与えています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/08 15:39

(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

この回答への補足

ご回答感謝します。

(1)について、試してみました。ありがとうございます。成功です!!

(2)について、進行率の表示はうれしいです。しかし、肝心のマクロ実行部分=「長い処理」の挿入どころをまちがえたのか、うまくいきませんでした。この点、お教えくださいますか?

また、できれば、「処理中は"しばらくお待ちください!"と表示したシートをアクティブに」する方法を教えてください。画面が固まっていると勘違いする方のためによりわかり易くしたいのです。よろしくお願いいたします。

補足日時:2005/11/08 13:05
    • good
    • 0

 ご要望とは少し違いますが、マクロ実行中の画面の動きをなくすだけなら


Application.ScreenUpdating = False

 を挿入することで、作業中の画面の更新がなくなり、最終結果のみが表示されます。作業時間も短縮されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/08 12:02

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