Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


43895 / 76732 ←次へ | 前へ→

【37864】Re:シートのコピーの高速化
回答  Kein  - 06/5/21(日) 15:19 -

引用なし
パスワード
   グラフを 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 を
ループしています。ただ、そのような回りくどいコードになっても、
単純なグラフのコピーより速いはずです。

1 hits

【37856】シートのコピーの高速化 Jun 06/5/21(日) 1:27 質問
【37864】Re:シートのコピーの高速化 Kein 06/5/21(日) 15:19 回答

43895 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free