dポイントプレゼントキャンペーン実施中!

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

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

A 回答 (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

この回答への補足

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

補足日時:2011/08/09 09:25
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/09 08:47

まだ不十分ですがこんな感じになると思います。


対象グラフの選定、系列が複数の場合、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/09 11:55
    • good
    • 0

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



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

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

お礼日時:2011/08/09 08:47

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