- ベストアンサー
エクセルVBAで実行中画面を固定するには
エクセルでマクロを作りましたが、さまざまなシートのを参照しているため、実行させると画面がめまぐるしくかわります。 マクロの実行中、スクロールやシートの変更などを固定させる命令はありますか。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
select等が含まれている場合は、実際にシートなどを選択して実行するため、 マクロ命令そのものをそういう命令を使わない形にするか、 直前の状態を保存して、最後に復元する必要があります。 selectを使っている限りシートの変更を固定できたとしてもそこでエラーになります。 今回の場合はselectを全て排除してこう記述すれば実現できます。 Application.ScreenUpdating = False Sheets("data").Range("C1").FormulaR1C1 = "2" Application.ScreenUpdating = True ScreenUpdating はなくても構いません。
その他の回答 (5)
- miwaki
- ベストアンサー率36% (14/38)
他の人のお答えとちょっと違った角度からお答えします。お役に立てばよいのですが。 そのマクロは、ひょっとして記録型マクロではありませんか。 例えばsheet1のセルA2にsheet2のセルB2の値を入れるのに以下のように記述すると画面が変わります。 Sheets("Sheet2").Select Range("B2").Select Selection.Copy Sheets("Sheet1").Select Range("A2").Select ActiveSheet.Paste これを以下のようにすれば画面は変わりません。 Sheet1.Range("A2")=Sheet2.Range("B2") このように不必要な画面選択やスクロールなどがないか調べて、それらを消去すればいかがでしょうか。
お礼
ありがとうございました。 そのとおりです。記録形マクロです。 これが、解決の原型でした。 たいへん参考になりました。
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 Excel97のVBAヘルプには「以前のバージョンの Excel では、このプロパティの値が自動的にリセットされましたが、Excel 97 ではリセットされません。」とありますが、私の経験上ではプロシージャが正常終了してリセットされなかった事は無いです。 修正パッチ前の初期バージョンだと戻らない事があるのかな? どうせなら、 Sub xxx() On Error GoTo ER Application.ScreenUpdating = False '何らかの処理 ER: Application.ScreenUpdating = True End Sub のようにエラー回避もした方が良いかも。
お礼
ありがとうございました。 無事解決しました。 エラー回避方法も参考になりました。
- big_fool
- ベストアンサー率22% (43/193)
No1の回答者さんと同じ 画面を固定したいステートメント前に下記を入れます Application.ScreenUpdation=False 2000以上のバージョンではプロジャーが終了すると 自動的にTrueに戻りますが 97では戻らないことがありますのでプロジャーの終了にApplication.ScreenUpdation=Trueを入れて戻してください
お礼
ありがとうございました。 無事解決しました。 余談ですが、Application.ScreenUpdatingを使うと処理速度も上がった記憶があります。 でも、どうしても思せなかった!
- tsubasa_n
- ベストアンサー率11% (2/17)
#1の方と同様になりますが。。。 処理開始時に Application.ScreenUpdating = False で、画面再描画を抑止します。 処理終了時に Application.ScreenUpdating = True で、再描画抑止を解除する事をお忘れなく。
お礼
ありがとうございました。 無事解決しました。 Application.ScreenUpdating は昔、雑誌で見た記憶がありましが、どうしても思い出せず、調べきれないでいました。
- papayuka
- ベストアンサー率45% (1388/3066)
Application.ScreenUpdating = False です。
お礼
ありがとうございました。 無事解決しました。
補足
皆様、回答ありがとうございました。 代表してこの回答に補足させていただきます。 結果的には私の使い方が悪くてうまくいきませんでした。 実際には、シート名:dataのセルC1に値2を入れるのですが、回答いただいた構文を挿入して別のシートから、マクロを実行すると dataのシートに移って終了します。 (マクロが終了しても、最初に開いていたシートのままでいたいのですが) この場合には、回答いただいた命令は使い方がちがうのでしょうが、ちなみに次のような内容です。 Application.ScreenUpdating = False Sheets("data").Select Range("C1").Select ActiveCell.FormulaR1C1 = "2" なお、エクセルのVERは2000です。
お礼
ありがとうございました。 ずばり、解決しました。 #5の方も含め、Selectの意味を再認識しました。