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


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

つまり、

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

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

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


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

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

回答の条件
  • 1人1回まで
  • 登録:2007/02/25 23:00:34
  • 終了:2007/03/04 23:05:02

回答(3件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982007/02/25 23:38:51

ポイント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ベストアンサー獲得回数132007/02/26 01:00:19

ポイント27pt

例)

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

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

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

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

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

id:kuro-yo No.3

くろょ回答回数169ベストアンサー獲得回数292007/02/26 01:03:58

ポイント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

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません