• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2007VBA:サブルーチンの実行結果が1度目と2度目で違う)

Excel2007VBA:サブルーチの実行結果が1度目と2度目で違う

このQ&Aのポイント
  • Excel2007のVBAで、「.csvデータからグラフを作成する」マクロに「そのグラフに系列を追加する」サブルーチンを2度呼び出すと、1度目と2度目で実行結果が異なることがあります。
  • 2度目の実行では、意図していた「A」という系列が表示されず、「B」という系列が意図通りに追加されます。また、凡例には「系列3」という名前の系列が存在します。
  • この現象の原因として、同一のサブルーチンであるにもかかわらず、1度目と2度目で処理の順番や状態が異なることが考えられます。修正するには、グラフのデータや処理の順序を確認し、必要な修正を行うことが必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

原因はここ。 >Charts("abc").Select >ActiveChart.SeriesCollection.NewSeries >ActiveChart.SeriesCollection(2).Name = line >ActiveChart.SeriesCollection(2).XValues = "='" & starttemp & "-" & endtemp & "'!$E$3:$E$" & mr >ActiveChart.SeriesCollection(2).Values = "='" & starttemp & "-" & endtemp & "'!$F$3:$F$" & mr ActiveChart.SeriesCollection.NewSeries この行では、ActiveChartに新しい系列を追加しています。 これ以下は ActiveChart.SeriesCollection(2)... に対する設定。つまり系列2に対する設定です。 このサブプロシージャを何回実行しても系列2に対する設定にしかなりません。 変更するなら、Withステートメントを使って括ってあげると、追加した系列に対して設定できます。 With Charts("abc").SeriesCollection.NewSeries   .Name = line   .XValues = "='" & starttemp & "-" & endtemp & "'!$E$3:$E$" & mr   .Values = "='" & starttemp & "-" & endtemp & "'!$F$3:$F$" & mr End With ついでですが、ActivateやSelectに影響されないコードをこころがけた方が良いです。 提示コードの範囲だけ修正してみると Dim r As Range 'グラフ元範囲用に変数を追加 ': ': 'グラフ化 Set r = ActiveSheet.Range("B2:B" & MaxRow, "D2:D" & MaxRow) With Charts.Add   .Name = "abc"   .ChartType = xlXYScatterLinesNoMarkers   .SetSourceData r End With '950-960(?)での接線Aを引く line = "A" '接線の範囲 starttemp = 950 endtemp = 960 Sheets.Add(After:=Sheets(Sheets.Count)).Name = starttemp & "-" & endtemp Call intercept '1000前後での接線Bを引く line = "B" '接線の範囲 starttemp = 1000 endtemp = 1020 Sheets.Add(After:=Sheets(Sheets.Count)).Name = starttemp & "-" & endtemp Call intercept こんな感じです。

clr-00-mak
質問者

お礼

回答ありがとうございます。 コードをコピーペーストしたらホントにあっさり解決しました。 ……select・activeの話も含めて「マクロの記録」で横着せずに勉強し直します。

関連するQ&A