プロが教える店舗&オフィスのセキュリティ対策術

エクセルでマクロを作りましたが、さまざまなシートのを参照しているため、実行させると画面がめまぐるしくかわります。
マクロの実行中、スクロールやシートの変更などを固定させる命令はありますか。

A 回答 (6件)

select等が含まれている場合は、実際にシートなどを選択して実行するため、


マクロ命令そのものをそういう命令を使わない形にするか、
直前の状態を保存して、最後に復元する必要があります。
selectを使っている限りシートの変更を固定できたとしてもそこでエラーになります。


今回の場合はselectを全て排除してこう記述すれば実現できます。

Application.ScreenUpdating = False
Sheets("data").Range("C1").FormulaR1C1 = "2"
Application.ScreenUpdating = True

ScreenUpdating はなくても構いません。
    • good
    • 0
この回答へのお礼

ありがとうございました。
ずばり、解決しました。
#5の方も含め、Selectの意味を再認識しました。

お礼日時:2004/06/01 12:37

他の人のお答えとちょっと違った角度からお答えします。

お役に立てばよいのですが。

そのマクロは、ひょっとして記録型マクロではありませんか。
例えば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")
このように不必要な画面選択やスクロールなどがないか調べて、それらを消去すればいかがでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。
そのとおりです。記録形マクロです。
これが、解決の原型でした。
たいへん参考になりました。

お礼日時:2004/06/01 12:35

#1です。



Excel97のVBAヘルプには「以前のバージョンの Excel では、このプロパティの値が自動的にリセットされましたが、Excel 97 ではリセットされません。」とありますが、私の経験上ではプロシージャが正常終了してリセットされなかった事は無いです。
修正パッチ前の初期バージョンだと戻らない事があるのかな?

どうせなら、

Sub xxx()
On Error GoTo ER
  Application.ScreenUpdating = False

  '何らかの処理

ER:
  Application.ScreenUpdating = True
End Sub

のようにエラー回避もした方が良いかも。
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事解決しました。
エラー回避方法も参考になりました。

お礼日時:2004/06/01 12:32

No1の回答者さんと同じ


画面を固定したいステートメント前に下記を入れます
Application.ScreenUpdation=False
2000以上のバージョンではプロジャーが終了すると
自動的にTrueに戻りますが
97では戻らないことがありますのでプロジャーの終了にApplication.ScreenUpdation=Trueを入れて戻してください
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事解決しました。
余談ですが、Application.ScreenUpdatingを使うと処理速度も上がった記憶があります。
でも、どうしても思せなかった!

お礼日時:2004/06/01 12:30

#1の方と同様になりますが。

。。

処理開始時に
Application.ScreenUpdating = False
で、画面再描画を抑止します。

処理終了時に
Application.ScreenUpdating = True
で、再描画抑止を解除する事をお忘れなく。
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事解決しました。
Application.ScreenUpdating は昔、雑誌で見た記憶がありましが、どうしても思い出せず、調べきれないでいました。

お礼日時:2004/06/01 12:28

Application.ScreenUpdating = False



です。

この回答への補足

皆様、回答ありがとうございました。
代表してこの回答に補足させていただきます。
結果的には私の使い方が悪くてうまくいきませんでした。

実際には、シート名:dataのセルC1に値2を入れるのですが、回答いただいた構文を挿入して別のシートから、マクロを実行すると dataのシートに移って終了します。
(マクロが終了しても、最初に開いていたシートのままでいたいのですが)
この場合には、回答いただいた命令は使い方がちがうのでしょうが、ちなみに次のような内容です。

Application.ScreenUpdating = False
Sheets("data").Select
Range("C1").Select
ActiveCell.FormulaR1C1 = "2"

なお、エクセルのVERは2000です。

補足日時:2004/06/01 10:16
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事解決しました。

お礼日時:2004/06/01 12:26

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

このQ&Aを見た人はこんなQ&Aも見ています