こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

excel2010 VBA グラフの目盛の変更

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

(例)
データの最小値380
      最大値400
目盛を370~410くらいにする

投稿日時 - 2011-08-05 11:40:56

QNo.6922805

すぐに回答ほしいです

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

今日はお休みですか?
見栄えが良くなるように条件を加味してみました。

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

投稿日時 - 2011-08-06 13:32:45

補足

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

投稿日時 - 2011-08-09 09:25:56

お礼

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

投稿日時 - 2011-08-09 08:47:41

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

投稿日時 - 2011-08-05 15:06:50

補足

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

投稿日時 - 2011-08-09 11:55:26

ANo.1

Excel2010ではマクロの記録がとれますので、それをもとに下記のように書けます。

実際のシートやグラフに合わせて修正してください。
With Sheets(1).ChartObjects("グラフ 1").Chart
.Axes(xlValue).MinimumScale = 370
.Axes(xlValue).MaximumScale = 410
End With

投稿日時 - 2011-08-05 13:26:41

お礼

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

投稿日時 - 2011-08-09 08:47:19

あなたにオススメの質問