グラフ作成において、基データを相対参照として記録する方法を教えてください。
つまり、
①範囲(A1,A10)を対象にグラフ作成する手順をマクロとして記録する
②そのマクロを少しいじることにより範囲(B1,B10)を対象にグラフを作成する
ということってできないのでしょうか?
「相対参照」で記録してもグラフ作成の際の参照元は「絶対参照」として記録されてしまうようです。
どなたか教えてください。
最初に作成したマクロ
Sub Macro1() ' ' Macro1 Macro ' ' Range("A1:A10").Select Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:A10"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub
.
次に Aというところを Bに変えて コピーした マクロ2
Sub Macro2() ' ' Macro2 Macro ' ' Range("B1:B10").Select Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:B10"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub
2箇所 変更するだけでいいです。
例)
次の使用例は、シート 1 のセル C5 のフォント サイズを 14 ポイントに設定します。
Worksheets("Sheet1").Cells(5, 3).Font.Size = 14
このような形で、セルの場所を数字で設定することができます。
cells()の中を変数にしてfor~nextなどでループさせれば、希望回数分同じ処理をするようになります。
なので、マクロで作成したrangeの部分をcellsに変更してループ文を追加するだけで大丈夫です。
最初に記録したマクロが、
Sub Macro1() Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:A10") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub
だったとすると、下のマクロも同じ動作をします。
Sub Macro2() Dim 範囲 As Range Set 範囲 = Sheets("Sheet1").Range("A1") Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=範囲.Range("A1","A10") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub
そして、以下のように、1箇所の変更だけで、対応できます。
Sub Macro3() Dim 範囲 As Range Set 範囲 = Sheets("Sheet1").Range("B1") 'ここだけを変更。 Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=範囲.Range("A1", "A10") 'ここは変更しなくて良い。 ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub
ありがとうございます。
列は毎回変えないといけないんでしょうか?
例えばAからZまで26個のグラフを作るとき毎回入力しなおさないといけないのかなあ?と。
簡単なやり方あれば是非教えていただきたく思います。