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

エクセルのグラフで教えてください。
下記のVBAを使って同じグラフを
それぞれ別シートに作成しています。

VBAの3行目のActiveSheetはシート名(入力画面)を指します。
入力画面のセルで1または2を入力することで
グラフの色が変わるようにしています。
そのグラフと同じものを別シート(印刷用画面)に作成したく
入力画面の入力で印刷用画面の入力も変わるようにしたつもりなのですが・・・
この方法だと、入力した際に
一瞬印刷用画面に移動して画面がちらついてしまいます。
このちらつきをなくしたいのですが
なにかよい方法はありますでしょうか?

よろしくお願いいたします。

Sub Sam1()
Dim i, nColor As Integer
ActiveSheet.ChartObjects("グラフ 8").Select
i = 1
nColor = 2 '←「2」の時の色
If Cells(i, 13) = 1 Then nColor = 5 '←「1」の時の色
ActiveChart.SeriesCollection(1).Points(i).Interior.ColorIndex = nColor
Sheets("印刷用画面").Select
ActiveSheet.ChartObjects("グラフ 2").Select
nColor = 2 '←「2」の時の色
If Sheets("入力画面").Cells(i, 13) = 1 Then nColor = 5 '←「1」の時の色
ActiveChart.SeriesCollection(1).Points(i).Interior.ColorIndex = nColor
Sheets("入力画面").Select
Range("H15").Select

End Sub

A 回答 (1件)

画面のちらつきをなくすのは下記のようにします。



Application.ScreenUpdating = False '画面更新抑止
・処理
Application.ScreenUpdating = True  '画面更新

【Excel】VBAのパフォーマンスを向上する
http://blog.livedoor.jp/akf0/archives/51118828.h …

ScreenUpdatingを使わなくても画面のちらつきをなくせます。
それにはSelect、Activateをしないようにして、ActiveSheetとかActiveCellをやめることです。
マクロ実行対象が同一ブック内なら、必要なところにはシート名をきちんと書いてやります。
提示されたコードも

Sub Sam2()
  Dim nColor As Variant
  Dim i As Long

  i = 1
  If Sheets("入力画面").Cells(i, "M") = 1 Then nColor = 6
  Sheets("入力画面").ChartObjects("グラフ 8").Chart.SeriesCollection(1).Points(i).Interior.ColorIndex = nColor
  Sheets("印刷画面").ChartObjects("グラフ 2").Chart.SeriesCollection(1).Points(i).Interior.ColorIndex = nColor

  Application.Goto Reference:=Sheets("入力画面").Range("H15"), Scroll:=True
End Sub

といった感じにまとめられます。
Sam2で画面が更新されるのは
Application.Goto Reference:=Sheets("入力画面").Range("H15"), Scroll:=True
のところだけです。
これなら
Application.ScreenUpdating = True
で、画面更新するのと変わりないことになります。
    • good
    • 0
この回答へのお礼

ありがとうございます。

早速試してみたところすごくうまくいきました!!

シート名ときちんと書くことが重要ですね!!

本当にありがとうございました。

お礼日時:2008/09/26 10:16

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