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

エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛、目盛間隔を揃えるにはどのようにしたら良いか教えてください。いくつかwebsiteで調べて下記のようにしてみましたが、x軸の目盛を変更するところで、失敗してしまいます。
よろしくお願いします。


Sub XY軸()

Dim Ymin
Ymin = InputBox("Y軸の最少?")
If IsNumeric(Ymin) Then
Range("C2").Value = Ymin
Else
MsgBox "入力NG!"
End If

Dim Ymax
Ymax = InputBox("Y軸の最大?")
If IsNumeric(Ymax) Then
Range("C3").Value = Ymax
Else
MsgBox "入力NG!"
End If


Dim Y
Y = InputBox("目盛間隔?")
If IsNumeric(Y) Then
Range("C4").Value = Y
Else
MsgBox "入力NG!"
End If


Dim xmin
xmin = InputBox("X軸の最少?")
If IsNumeric(xmin) Then
Range("D2").Value = xmin
Else
MsgBox "入力NG!"
End If

Dim Xmax
Xmax = InputBox("X軸の最大?")
If IsNumeric(Xmax) Then
Range("D3").Value = Xmax
Else
MsgBox "入力NG!"
End If


Dim X
X = InputBox("Xの目盛間隔?")
If IsNumeric(X) Then
Range("D4").Value = X
Else
MsgBox "入力NG!"
End If


Dim co As ChartObject
For Each co In ActiveSheet.ChartObjects
With co.Chart
With .Axes(xlValue)
.MinimumScale = Range("C2").Value '最小値
.MaximumScale = Range("C3").Value '最大値
.MajorUnit = Range("C4") '目盛間隔
End With

With .Axes(xlCategory)
.MinimumScale = Range("D2").Value '最小値
.MaximumScale = Range("D3").Value '最大値
.MajorUnit = Range("D4") '目盛間隔
End With

End With
Next
End Sub

A 回答 (2件)

失礼します。



>現在シートにグラフが18個ありますが、別に折れ線グラフも2つあります。
ChartTypeプロパティで散布図化どうか判定し、If文で分岐処理すればどうでしょうか。

co.Chart.ChartType
    • good
    • 0
この回答へのお礼

xls88様

お礼が遅くなりました。アドバイスを参考に下記のように修正してうまくいきました。
ありがとうございました。

If co.Chart.ChartType = xlXYScatter Then
With .Axes(xlValue)

.MinimumScale = Range("C2").Value '最小値
.MaximumScale = Range("C3").Value '最大値
.MajorUnit = Range("C4") '目盛間隔
End With
End If

お礼日時:2010/05/02 18:23

ぱっと見たところマクロ自体には問題は無さそうなので,実際に入れたデータが悪いのではありませんか。



たとえば「X軸を対数目盛にしている」のに,「最小値としてゼロやマイナスを入れようとした」とか,目盛り間隔の値の選定を間違えているとか。
マクロ以前に手動で,軸の書式設定の目盛タブで,入れようとした数字を実際に入れてみて正しく入る数字かどうか確認してみてください。

また具体的に「どのデータに幾つの数字を入れた」時に,「どこの行で」どんなトラブルが起きたのか,正しく情報提供してみてください。
    • good
    • 0
この回答へのお礼

keithin様
早速のアドバイスありがとうございます。
x軸は対数などにはしておりません。また、手動では問題ありませんでした。

以下、もう少し補足と確認したことを書かせていただきます。

エラーの表示として、
 「.MaximumScale メソッドは失敗しました ’Axisオブジェクト」

デバッグでは、以下がエラーとされてしまいます。
.MinimumScale = Range("D2").Value '最小値

C2=0,C3=5,C4=1
D2=0,D3=60,D4=20と入れています。


現在シートにグラフが18個ありますが、別に折れ線グラフも2つあります。
これが問題な気もします。y軸だけであれば、上のものでうまく一括変換できました。

今回、例えば折れ線グラフを2個だけ選択した状態にして、シート中の選択されていないグラフ(散布図)のみを対象に一括変換できたりしますでしょうか?
もちろん、選択したグラフ(散布図18個)だけを対象にするのが良いのでしょうが。

お礼日時:2010/04/17 23:04

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