
エクセルのVBAを用いてプログラムを書いているのですが、どうしてもわからないことがあるので教えて下さい。
あるデータの時間経過(推移)の折れ線グラフを自動的にチャートシートに作図させたのですが、X軸に日付の目盛りを表示させ忘れてしまい、X軸に日付の目盛りを表示させるようにマクロを記録し、それを基に手直しをして追加プログラムを書いているのですがうまく行きません。というのは、X軸に日付の目盛りを表示させることはできたのですが、それに伴い、チャートの形が変わってしまうのです。グラフの種類は折れ線でサインカーブの様なスムーズな線が角張ったゴツゴツした感じの線になってしまいます。これってバグでしょうか?
具体的なプログラムは、Range(cells(50, 2), cells(150, 5))のデータでグラフを作成し、その後、Range(cells(50, 1), cells(150,1))の日付データをX軸に設定するといった感じで組んでいます。グラフの表示形式を変えずに、X軸の目盛りラベルのみを変更(表示)させるにはどのようにすれば良いでしょうか
No.4ベストアンサー
- 回答日時:
> 「AxisクラスのMinimumScaleプロパティを設定できません」
一つ、重大な過ちに気づきました(汗)。「折れ線グラフ」で描かれている
ということを見落としていました。申し訳ありません。
もし、問題なければ、X軸のサンプル間隔に制限のない「散布図」を使われては
いかがでしょう?。スムーズな線がゴツゴツになってしまう例として、X軸系列
の増分が一定でないことが考えられます。
回答No.3に示したマクロの
For Each Chart In .Charts
の下に
Chart.ChartType = xlXYScatter
With Chart.SeriesCollection(1)
.Border.Weight = xlHairline
.Smooth = True
End With
の5行追加していただければOKです。
なお、「折れ線グラフのままにしたい」ということでしたら、
次のように書き直してください。
Sub Macro2()
With ActiveWorkbook
Set stTime = Sheets("Sheet1").Cells(2, 1) 'x軸の最小値
Set edTime = Sheets("Sheet1").Cells(38, 1) 'x軸の最大値
n = edTime.Row - stTime.Row 'x軸の幅n
For Each Chart In .Charts
With Chart.Axes(xlCategory)
.TickLabelSpacing = n / 10 '目盛ラベルにnの10分割を入れる
.TickMarkSpacing = n / 10
End With
Next Chart
End With
Set stTime = Nothing
Set edTime = Nothing
End Sub
なお、シート保護がかかった状態でも同様のエラーメッセージが出ます。
-いずれもEXCEL2000にて動作確認-
毎度、ありがとうございます。
今晩また試してみます。
スムーズな線がゴツゴツになってしまう例として、X軸系列
の増分が一定でないことが考えられます。
確かに、祝日、土日のデータが抜けているので、それが
原因かも知れません。
No.3
- 回答日時:
誤解ですか?失礼しました(^^;)。
For each - nextステートメントのご指摘ありがとうございます。早速以下の通り訂補してみましたがいかがでしょう?Sub Macro1()
With ActiveWorkbook
Set stTime = Sheets("Sheet1").Cells(50, 1) 'x軸の最小値
Set edTime = Sheets("Sheet1").Cells(150, 1) 'x軸の最大値
n = edTime.Value - stTime.Value 'x軸の幅n
For Each Chart In .Charts
With Chart.Axes(xlCategory)
.MinimumScale = stTime.Value
.MaximumScale = edTime.Value
.MajorUnit = n / 10 '目盛りにnの10分割を入れる
End With
Next Chart
End With
Set stTime = Nothing
Set edTime = Nothing
End Sub
TTakさん、
昨日ご回答頂いたサンプルコードをコピーして試したところ、
.MinimumScale = stTime.Value のところでエラーが発生してしまいます。
.MaximumScale = edTime.Value のところでもエラーが発生すると考えられます。最初は変数もしくはコーディングの間違えと思い色々と検討してみましたが結局駄目でした。デバッグで変数の値をチェックしてみるとstTime,edTimeともにcells(50,1), cells(150,1)の値が入っていることは確認しました。エラーメッセージは次のようなダイアログが表示されました。
「AxisクラスのMinimumScaleプロパティを設定できません」
何か心当たりはありますか?
MajorUnit = n / 10 は、なかなかわかりやすかったです。
No.2
- 回答日時:
> チャートシートでも同様に設定可能でしょうか
チャートシートとはグラフシートのことと察しますが、同様に設定可能です
また、完全に処理を自動化するならば、速度を考慮して、activateメソッド
を使わない方がいいでしょう。
> 目盛り間隔(例えば10個)を同時に設定するにはどのようなコードを入れれば良いのでしょうか?
これはグラフシートが複数あって、X軸を一気に同じ設定にしたいということ
ですね。私が思いつくのは、Chartsオブジェクト(グラフシート)の個数を
数えて、Chartsコレクションオブジェクトのインデクスに順々に値を入れて、
X軸を設定していく方法です。
Sub Macro1()
With ActiveWorkbook
For I = 1 To .Charts.Count
With .Charts(I).Axes(xlCategory)
.MinimumScale = Sheets("Sheet1").Cells(50, 1).Value
.MaximumScale = Sheets("Sheet1").Cells(150, 1).Value
End With
Next I
End With
End Sub
-EXCEL2000にて動作確認済み-
この回答への補足
私の質問の仕方が悪い様で、誤解されたと思います。
X軸の最小値(例えば0)、最大値(例えば100)の設定に加え、目盛り間隔を10にして10個の目盛りラベルをふるということです。目盛り間隔を5にした時は20個の目盛りラベルをふることになります。この様な設定を軸の設定と同様にコーディングしたいということです。
PS、Activate methodは遅いのですか?、今後、極力使用しない様に心がけます。
参考になりました。今回の回答頂いたFor - nextのループ処理をFor each - nextステートメントに変えると処理時間の短縮につながると思います(全ての対象オブジェクトに対してループ処理を行う場合)。
No.1
- 回答日時:
mygskさんこんにちは
グラフの名前を"グラフ 1"とすると次のコードになります。
With ActiveSheet.ChartObjects("グラフ 1").Chart.Axes(xlCategory)
.MinimumScale = Cells(50, 1).Value
.MaximumScale = Cells(150, 1).Value
End With
グラフの名前は、グラフをオブジェクトとして選択した際に、名前ボックスに表示されます。デフォルトでは、作った順番に"グラフ 1",2,3...となります。
-EXCEL2000にて動作確認済み-
TTakさん、ありがとうございます。
とりあえず試してみます。
埋め込みグラフではなく、チャートシートでも同様に設定可能でしょうか
例えば、アクティブなチャートを指定してからです。
Charts(str_sheet_Name(i)).activate
With ActiveChats(1)
.chart.Axes(xlcategory).minimumScale=cells(50,1).value
.chart.Axes(xlcategory).maximumScale=cells(150,1).value
End with
この場合、TTakさんの例で言うとstr_sheet_Name(i) = "グラフ1"になります
また、目盛り間隔(例えば10個)を同時に設定するにはどのようなコードを入れれば良いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) エクセルの折れ線グラフで教えて下さい 1 2023/03/05 22:48
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) エクセルのグラフに上下限値の横棒を表示させたい 5 2022/12/12 11:09
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) Excel2010 グラフ 横軸目盛線の間隔変更 1 2023/05/09 11:47
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) <スプレッドシート>採用進捗 グラフ作成について 3 2022/10/23 15:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptでグラフ
-
True WebChart
-
VBA グラフの存在の判定について
-
グラフを「似ている」順に並べ...
-
Webにて、3次元グラフを表示す...
-
Excelのグラフ「2軸上の折れ線...
-
Webでのグラフ表示を行うには、...
-
excelで散布図に線を追加したい
-
Excel VBAで、グラフを特定のセ...
-
excelのグラフをLaTexに挿入す...
-
グラフの元のデータを消しても...
-
C言語によるハノイの塔のプログ...
-
vlan internal allocation poli...
-
WindowsからSSHでサーバーにあ...
-
エクセルでファイルの最終更新...
-
NASからNASへの自動バックアッ...
-
ファイルをコピーしたとき、も...
-
沢山のフォルダにあるファイル...
-
VC++のデータ保存について
-
CPコマンドでファイルがコピー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでグラフをクリックし...
-
グラフの元のデータを消しても...
-
VBA グラフの存在の判定について
-
Excel VBAで、グラフを特定のセ...
-
Excel VBA グラフ ChartType に...
-
C#のChartで目盛線をグラフの前...
-
Matlabによる複素数・・・
-
論文に載せるグラフを作成したい
-
excelで散布図に線を追加したい
-
グラフの色を数値で変わるように!
-
DirectShowでフィルタの削除
-
【VBA】Excel等高線グラフの...
-
ブラウザ上で高度な操作を実現...
-
Excelマクロでグラフの縦軸目盛...
-
レガシーASPでのグラフ作成...
-
Visual C++ 2005 でのグラフ表...
-
Excel VBAでのグラフ
-
c言語 正負の値それぞれでの最...
-
C言語でグラフ作成
-
matlabのy軸を2つ利用したグラ...
おすすめ情報