Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9943 / 76734 ←次へ | 前へ→

【72346】Re:エクセルのグラフのマクロについて
発言  kanabun  - 12/7/19(木) 9:26 -

引用なし
パスワード
   ▼夢 さん:こんにちは〜

>一つのシートの中に、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

参考にしてください。

3 hits

【72345】エクセルのグラフのマクロについて 12/7/19(木) 0:14 質問
【72346】Re:エクセルのグラフのマクロについて kanabun 12/7/19(木) 9:26 発言
【72348】Re:エクセルのグラフのマクロについて 12/7/19(木) 21:26 お礼
【72347】Re:エクセルのグラフのマクロについて kanabun 12/7/19(木) 9:47 発言

9943 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free