dポイントプレゼントキャンペーン実施中!

他のセルの値を転記し、複数の折れ線グラフを1つのエリアに作成するというマクロを作りたいと思っています。マクロについて詳しくないので、手動作成の様子をマクロに記録させ、それを少し手直ししました。しかしどうしてもエラーの出るところがあります。このような質問の方法でいいのか不安ですが、もしお分かりになれば悪いところをお教えいただけないでしょうか。

以下、エラーの出るマクロです。

Sub 分析用グラフまとめて()
'まず必要な値を計算式で持ってくる(とりあえず4行目だけ)
Sheets("分析").Select
Range("ac4").Formula = "='分析'!g4"
Range("ad4").Formula = "='分析'!l4"
Range("ae4").Formula = "='分析'!q4"
Range("af4").Formula = "='分析'!s4"
'次に上記計算式を750行目までオートフィルコピー
Sheets("分析").Select
Range("ac4:af4").Select
Selection.AutoFill Destination:=Range("ac4:af750"), Type:=xlFillDefault
Range("ac4:af750").Select
'A6のデータを削除(1900年01月00日となり、グラフが変になるため)
Range("A6").Clear
'ac6~ae6のデータを削除(0という数値が入っているため)
Range("ac6:af6").Clear
'A列の表示形式を日付にする
Range("A:A").Select
Selection.NumberFormatLocal = "yyyy/mm/dd"
'グラフ作成
Sheets("分析").Select
With ActiveSheet.ChartObjects.Add(1600, 1540, 2400, 210).Chart
.ChartType = xlLine
.SetSourceData Source:=Range("ac6:af750")
End With
'グラフを選択
ActiveSheet.ChartObjects("グラフ 8").Activate
ActiveChart.PlotArea.Select
'系列名、X(横、項目)軸ラベル指定
With ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection(1).Name = "='分析'!$ac$4"
ActiveChart.SeriesCollection(1).XValues = "='分析'!$A$6:$A$750"
ActiveChart.SeriesCollection(2).Name = "='分析'!$ad$4"
ActiveChart.SeriesCollection(2).XValues = "='分析'!$A$6:$A$750"
ActiveChart.SeriesCollection(3).Name = "='分析'!$ae$4"
ActiveChart.SeriesCollection(3).XValues = "='分析'!$A$6:$A$750"
ActiveChart.SeriesCollection(4).Name = "='分析'!$af$4" '<===ここが黄色く反転して動作が止まります
ActiveChart.SeriesCollection(4).XValues = "='分析'!$A$6:$A$750"
'凡例をグラフに重ねず表示
ActiveChart.Legend.Select
ActiveChart.Legend.IncludeInLayout = False
End With
End Sub

A 回答 (1件)

エラーの原因は、データ系列が3つしか作成されていないのに、4つ目の系列を修正しようとしているためです。


修正をしましたので、とりあえずエラーなく実行できると思います。

◆修正箇所
.SetSourceData Source:=Range("ac6:af750") をXValuesも含めて指定しています。
そのあとのXValuesの指定はダブりと思いますが、そのままにしています。
繰り返しマクロ実行するとグラフ名が連番で変更されるので、毎回作成したグラフを選択できるようにした。

◆マクロ
Sub 分析用グラフまとめて_改()
Dim myName As String '<==追加
'まず必要な値を計算式で持ってくる(とりあえず4行目だけ)
Sheets("分析").Select
Range("ac4").Formula = "='分析'!g4"
Range("ad4").Formula = "='分析'!l4"
Range("ae4").Formula = "='分析'!q4"
Range("af4").Formula = "='分析'!s4"
'次に上記計算式を750行目までオートフィルコピー
Sheets("分析").Select
Range("ac4:af4").Select
Selection.AutoFill Destination:=Range("ac4:af75"), Type:=xlFillDefault
Range("ac4:af75").Select
'A6のデータを削除(1900年01月00日となり、グラフが変になるため)
Range("A6").Clear
'ac6~ae6のデータを削除(0という数値が入っているため)
Range("ac6:af6").Clear
'A列の表示形式を日付にする
Range("A:A").Select
Selection.NumberFormatLocal = "yyyy/mm/dd"
'グラフ作成
Sheets("分析").Select
With ActiveSheet.ChartObjects.Add(1600, 1540, 2400, 210).Chart
.ChartType = xlLine
.SetSourceData Source:=Range("$A$6:$A$75,ac6:af75") '<==修正 XValuesも含めた
myName = Mid(.Name, Len(ActiveSheet.Name) + 2) '<==追加 グラフ名を定義
End With
'グラフを選択
'ActiveSheet.ChartObjects("グラフ 5").Activate '<==修正前のもの
ActiveSheet.ChartObjects(myName).Activate '<==修正 マクロで作成したグラフを選択
ActiveChart.PlotArea.Select
'系列名、X(横、項目)軸ラベル指定
With ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection(1).Name = "='分析'!$ac$4"
ActiveChart.SeriesCollection(1).XValues = "='分析'!$A$6:$A$75"
ActiveChart.SeriesCollection(2).Name = "='分析'!$ad$4"
ActiveChart.SeriesCollection(2).XValues = "='分析'!$A$6:$A$75"
ActiveChart.SeriesCollection(3).Name = "='分析'!$ae$4"
ActiveChart.SeriesCollection(3).XValues = "='分析'!$A$6:$A$75"
ActiveChart.SeriesCollection(4).Name = "='分析'!$af$4" '<===ここが黄色く反転して動作が止まります
ActiveChart.SeriesCollection(4).XValues = "='分析'!$A$6:$A$75"
'凡例をグラフに重ねず表示
ActiveChart.Legend.Select
ActiveChart.Legend.IncludeInLayout = False
End With
End Sub
    • good
    • 0
この回答へのお礼

助かりました

マクロを修正してくださってありがとうございます!
私は存在しないデータ系列の修正をしようとしていたのですね(^^;
グラフのもととなるデータの範囲指定を変更するとエラーが出なくなり、いろんなことが一気に進みました!
修正してくださったマクロですが、恥ずかしながら「Dim myName As String」などの使い方が分からず、あとで自分で手を加えられなくなりそうでしたので、今回はグラフの範囲指定を変更することで対処しました。ですのでマクロがかなり長くなり、見づらくなっています。これを機会に「Dim myName As String」といったものを使えるようにしていこうかと考えているところです。きっかけを与えてくださってありがとうございます。

お礼日時:2020/07/25 16:19

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