エクセルマクロ/VBAについて質問です。


グラフ作成において、基データを相対参照として記録する方法を教えてください。

つまり、

①範囲(A1,A10)を対象にグラフ作成する手順をマクロとして記録する

②そのマクロを少しいじることにより範囲(B1,B10)を対象にグラフを作成する 

ということってできないのでしょうか?


「相対参照」で記録してもグラフ作成の際の参照元は「絶対参照」として記録されてしまうようです。

どなたか教えてください。
 

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2007/03/04 23:05:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント27pt

最初に作成したマクロ

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箇所 変更するだけでいいです。

id:uenoyamaka

ありがとうございます。

列は毎回変えないといけないんでしょうか?

例えばAからZまで26個のグラフを作るとき毎回入力しなおさないといけないのかなあ?と。

簡単なやり方あれば是非教えていただきたく思います。

2007/02/26 00:17:59
id:careplanner No.2

回答回数338ベストアンサー獲得回数13

ポイント27pt

例)

次の使用例は、シート 1 のセル C5 のフォント サイズを 14 ポイントに設定します。

Worksheets("Sheet1").Cells(5, 3).Font.Size = 14

このような形で、セルの場所を数字で設定することができます。

cells()の中を変数にしてfor~nextなどでループさせれば、希望回数分同じ処理をするようになります。

なので、マクロで作成したrangeの部分をcellsに変更してループ文を追加するだけで大丈夫です。

id:kuro-yo No.3

回答回数171ベストアンサー獲得回数29

ポイント26pt

最初に記録したマクロが、

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません