[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『グラフにおける数式のコピー』(NEKO)
グラフを作成する際、series関数内の引数に自分で定義した数式を使用しているのですが、この数式がシートをコピーした際に維持されず困っています。
具体的には、
=SERIES("sample1",sample1!time,sample1!temperature,1)
という関数が、シートをコピーすると
=SERIES("sample1 (2)",sample1 (2)!$A$2:$A$302,sample1 (2)!$B$2:$B$302,1)
のように範囲に置き換わってしまいます。
*timeとtemperatureはOFFSET関数を利用して定義した数式になります
シートをコピーしても範囲指定に置き換わらず数式を維持することは可能でしょうか。
宜しくお願い致します
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(γ) 2021/03/06(土) 21:14
(γ) 2021/03/06(土) 21:34
マクロを書いて見ました。 (1)以下のマクロを、標準モジュールにコピーして下さい。 (2)複製元のシートをアクティブな状態(選択する)にして下さい。 (3)マクロ main を実行すると、 ・シートが再右端に複製されます。 ・元シートにあった名前定義もコピーされていて、 グラフのデータ範囲が、その名前を使ったものになるはずです。
【参考コード】 Sub main() Dim ws0 As Worksheet Dim ws As Worksheet Dim wsName0 As String Dim wsName As String Dim chObj As ChartObject Dim ch As Chart Dim ch0 As Chart Dim seriesCol As SeriesCollection Dim sers As Series Dim k As Long Dim s0 As String Dim s As String
'元のシート(現在のActiveシート)をコピーして、最終位置へ Set ws0 = ActiveSheet ws0.Copy After:=Worksheets(Worksheets.Count) Set ws = ActiveSheet wsName0 = ws0.Name wsName = ws.Name
'複製後の各グラフについて以下を実行 For Each chObj In ws.ChartObjects Set ch = chObj.Chart
'対応する元シートのChartを取得 s0 = Replace(chObj.Name, wsName, wsName0) Set ch0 = ws0.ChartObjects(s0).Chart
'各系列のFormulaプロパティを、対応する元のものを変換して再作成 For k = 1 To ch.SeriesCollection.Count Set sers = ch.SeriesCollection(k) s = ch0.SeriesCollection(k).formula If InStr(wsName, " ") > 0 Then sers.formula = Replace(s, wsName0, "'" & wsName & "'") Else sers.formula = Replace(s, wsName0, wsName) End If Next Next End Sub
ちなみに、元シートのシート名は、spaceを含まないものにしておいてください。 十分精査していないので、ミスが混入している可能性は否定しません。(自信ありww)
(γ) 2021/03/07(日) 09:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.