|
グラフを Copy するのでなく、Duplicate した方が処理は速くなります。
以下のようなコードでテストしてみて下さい。
Sub MySheet_Copy()
Dim Sh As Worksheet, Sh2 As Worksheet
Dim Ch As ChartObject
Dim Se As Series
Dim Fom As String, Nm1 As String, Nm2 As String
Application.ScreenUpdating = False
Set Sh = ActiveSheet
Set Sh2 = Worksheets.Add(After:=Sh)
Nm1 = Sh.Name: Nm2 = Sh2.Name
Sh.Cells.Copy Sh2.Range("A1")
If Sh.ChartObjects.Count = 0 Then GoTo ELine
For Each Ch In Sh.ChartObjects
Ch.Duplicate.Chart.Location xlLocationAsObject, Nm2
Next
For Each Ch In Sh2.ChartObjects
For Each Se In Ch.Chart.SeriesCollection
Fom = Se.Formula
Se.Formula = Replace(Fom, Nm1, Nm2)
Next
Next
ELine:
Sh2.Range("A1").Select
Set Sh = Nothing: Set Sh2 = Nothing
Application.ScreenUpdating = True
End Sub
新規シートに移動した ChartObject に対して、最初のループの中に
系列の数式を置換するループをネストしてしまえば、もっと効率良く
なりそうな気がしますが、それだとなぜかコピー元のシートのセル
範囲をリンクしたままになっているので、あらためてコピー先シート
のセル範囲を参照するように、コピー先シート内の ChartObject を
ループしています。ただ、そのような回りくどいコードになっても、
単純なグラフのコピーより速いはずです。
|
|