プロが教えるわが家の防犯対策術!

エクセルのマクロで教えてください。20個のグラフを一つのシートに作成しますが、この20個の散布図グラフの中から、クリックして選択したグラフだけ、y軸の目盛を自動スケールで最大値、最少値、目盛間隔の分割数は5個に自動にできないでしょうか?

いくつか質問サイトを調べて、以下でアクティブシートのすべてのグラフ(20個)をセルに入力された値に一括で変更することはできるのですが、クリックして選択したグラフだけ、上記のようにできません。よろしくお願いします。

Sub 全部()

Dim co As ChartObject
For Each co In ActiveSheet.ChartObjects
With co.Chart
With .Axes(xlValue)
.MinimumScale = Range("A1").Value '最小値
.MaximumScale = Range("A2").Value '最大値
.MajorUnit = Sheets("Sheet1").Range("A3") '目盛間隔
End With
End With
Next
End Sub

A 回答 (2件)

『アクティブシート内の選択した複数のグラフ...』という事なので


蛇足レスではありますが、もし単独選択の場合と兼用したいなら以下のような感じになるかと。

Sub test()
  Const mu As Double = 5
  Dim x As Object
  Dim xi As Object

  Set x = Selection
  If TypeName(x) <> "DrawingObjects" Then
    If Not ActiveChart Is Nothing Then
      With ActiveChart.Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MajorUnit = mu
      End With
    End If
  Else
    For Each xi In x
      If TypeName(xi) = "ChartObject" Then
        With xi.Chart.Axes(xlValue)
          .MinimumScaleIsAuto = True
          .MaximumScaleIsAuto = True
          .MajorUnit = mu
        End With
      End If
    Next
  End If
  
  Set x = Nothing
End Sub
    • good
    • 2
この回答へのお礼

end-u様
ありがとうございました。
単独指定の場合もありますので、教えていただいた内容で活用させていただきます。

お礼日時:2010/01/18 21:53

まとめて選択している時は


グラフとしてではなく、
図としてしか扱えないみたいです。
そこで、選択されているものの名前を取得して
グラフを操作してみました。

Dim cht As Object
Dim chtName(20) As String
Dim i As Long
For Each cht In Selection
i = i + 1
chtName(i) = cht.Name
With ActiveSheet.ChartObjects(chtName(i)).Chart.Axes(xlValue)
.MinimumScale =Range("A1").Value '最小値
.MaximumScale =Range("A2").Value '最大値
.MajorUnit = Range("A3") '目盛間隔
   End With
Next

Rangeの前にはこのように
Sheets("Sheet1").Range("A3") '目盛間隔
sheetを指定しておいてください。
動作確認してここに貼り付け、一部修正しましたが
ご希望どおりになるはずなので
エラーが出たらご自分で修正を。
    • good
    • 1
この回答へのお礼

DreamyCat様

ありがとうございました。試したところうまくできました。
たくさんの作業があり助かりました。

お礼日時:2010/01/18 21:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています