|
▼夢 さん:こんにちは〜
>一つのシートの中に、4つの折れ線グラフがあり、この4つのグラフのうち2つは残りの2つのグラフをコピーしたものです。 とりあえずグラフ1、グラフ2、グラフ3、グラフ4とします。
Excelは日本語バージョンですよね?
よくわからないのは、
>「マクロの記録」を使って記録
すると、
> ActiveSheet.ChartObjects("Chart 1""").Activate
「Chart 1」をコピーしたグラフ名がなぜ「Chart 1"」になったのか?
「Chart 2」をコピーしたグラフの名前がなぜ「Chart 2"」になったのか?
というところです。
こちらでは「Chart 1」と「Chart 2」を作っておいてそれぞれをコピー
して作った複製グラフの名は「Chart 3」「Chart 4」ですけど?
いずれにしても、
あるワークシートに4つの埋め込みグラフがあれば、名前が何であれ、
それらは固有の「番号」(インデックス)をもちますので、名前の代わりに
このインデックスでアクセスできます。
↓で「グラフの番号」と「グラフの名前」の対応関係を確認してください
Sub test1()
Dim obj As ChartObject
Dim i As Long
For Each obj In ActiveSheet.ChartObjects
i = i + 1
Debug.Print i, obj.Name
Next
End Sub
シート内に4つのグラフがあれば、それらは 作成順に 1, 2, 3, 4
と Index が振られています。(ChartObjects(Index) です)
このIndexを使って「マクロ記録」を書きなおすと、↓のようになります。
> .ChartObjects(1)
というのは 埋め込みグラフの枠線のこと(グラフ本体を入れるコンテナ)
そのあとの
> .Chart
が実際のグラフです。
Sub test2()
With ActiveSheet.ChartObjects(1).Chart
.Axes(xlValue).MinimumScale = 100
.Axes(xlValue).MaximumScale = 200
.Axes(xlValue).MajorUnit = 20
End With
With ActiveSheet.ChartObjects(2).Chart
.Axes(xlValue).MinimumScale = 0
.Axes(xlValue).MaximumScale = 50
.Axes(xlValue).MajorUnit = 10
End With
With ActiveSheet.ChartObjects(3).Chart
.Axes(xlValue).MinimumScale = 500
.Axes(xlValue).MaximumScale = 1000
.Axes(xlValue).MajorUnit = 100
End With
With ActiveSheet.ChartObjects(4).Chart
.Axes(xlValue).MinimumScale = 0
.Axes(xlValue).MaximumScale = 500
.Axes(xlValue).MajorUnit = 100
End With
End Sub
また、.Axes(xlValue) オブジェクトまでもWith 句に入れてしまえば、
こうなります。
Sub test3()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue)
.MinimumScale = 100
.MaximumScale = 200
.MajorUnit = 20
End With
With ActiveSheet.ChartObjects(2).Chart
.MinimumScale = 0
.MaximumScale = 50
.MajorUnit = 10
End With
With ActiveSheet.ChartObjects(3).Chart
.MinimumScale = 500
.MaximumScale = 1000
.MajorUnit = 100
End With
With ActiveSheet.ChartObjects(4).Chart
.MinimumScale = 0
.MaximumScale = 500
.MajorUnit = 100
End With
End Sub
参考にしてください。
|
|