• ベストアンサー

excel2010 VBA グラフの目盛の変更

EXCEL2010のVBAでグラフを作成するコードを作成しております。 コードを実行すると入力シートの値を読み込み、別シートにグラフを複数作成します。 入力シートは最初はデータが入っておらず後から入力します。入力されたデータが反映されて グラフに値が表示されるのですが、目盛は0~値の最高値の少し上くらいまでが表示されます。 これを値が入力シートに入力されてグラフに反映されたら、目盛を表示された値の周辺のみに自動で変更したいのですが何か方法はないでしょうか? (例) データの最小値380       最大値400 目盛を370~410くらいにする

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

今日はお休みですか? 見栄えが良くなるように条件を加味してみました。 Dim chtObj As ChartObject Dim ser As Series Dim mind As Double Dim maxd As Double Dim minv As Double Dim maxv As Double Dim n As Integer Set chtObj = ActiveSheet.ChartObjects(1) With chtObj.Chart For Each ser In .SeriesCollection If mind = 0 Or maxd = 0 Then mind = WorksheetFunction.min(ser.values) maxd = WorksheetFunction.max(ser.values) Else If mind > WorksheetFunction.min(ser.values) Then mind = WorksheetFunction.min(ser.values) End If If maxd < WorksheetFunction.max(ser.values) Then maxd = WorksheetFunction.max(ser.values) End If End If Next minv = WorksheetFunction.RoundDown(mind, -1) maxv = WorksheetFunction.RoundUp(maxd, -1) With .Axes(xlValue) n = Int((maxv - minv) / .MajorUnit) If minv < maxv - .MajorUnit * n Then minv = maxv - .MajorUnit * (n + 1) End If .MinimumScale = minv .MaximumScale = maxv If mind < .MinimumScale + .MajorUnit * 3 / 5 Then .MinimumScale = .MinimumScale - .MajorUnit End If End With End With

Not_Pro
質問者

お礼

回答ありがとうございます。 細かい部分まで助かります。

Not_Pro
質問者

補足

初心者の私には難しいのでひとつ前の回答ので動くのであればひとつ前ので動かそうかと思います。

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

まだ不十分ですがこんな感じになると思います。 対象グラフの選定、系列が複数の場合、MajorUnitとの整合性、等々 考慮すべき事が他にもあります。 ワークシートイベントで起動すれば良いと思います。 Dim chtObj As ChartObject Dim vals As Variant Dim minv As Double Dim maxv As Double Set chtObj = ActiveSheet.ChartObjects(1) With chtObj.Chart With .SeriesCollection(1) vals = .values minv = WorksheetFunction.min(vals) minv = WorksheetFunction.RoundDown(minv, -1) maxv = WorksheetFunction.max(vals) maxv = WorksheetFunction.RoundUp(maxv, -1) End With With .Axes(xlValue) .MinimumScale = minv .MaximumScale = maxv End With End With

Not_Pro
質問者

補足

できればどの部分がどのような動きになるのか大まかでよいので教えていただけると助かります。

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

Excel2010ではマクロの記録がとれますので、それをもとに下記のように書けます。 実際のシートやグラフに合わせて修正してください。 With Sheets(1).ChartObjects("グラフ 1").Chart .Axes(xlValue).MinimumScale = 370 .Axes(xlValue).MaximumScale = 410 End With

Not_Pro
質問者

お礼

回答ありがとうございます。さっそく見てみます。

関連するQ&A