人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

つまり、

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

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

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


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

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

●質問者: uenoyamaka
●カテゴリ:コンピュータ インターネット
✍キーワード:A1 A10 VBA エクセル グラフ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●27ポイント

最初に作成したマクロ

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

◎質問者からの返答

ありがとうございます。

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

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

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


2 ● らいず
●27ポイント

例)

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

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

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

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

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


3 ● くろょ
●26ポイント

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

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
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ