• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAでのグラフ)

Excel VBAでのグラフ作成の際にミスした箇所と修正方法について教えてください

このQ&Aのポイント
  • エクセルのVBAを用いてグラフを作成する際、X軸に日付の目盛りを表示させる方法を調べています。記録したマクロを基に追加プログラムを書いていますが、X軸の目盛りが表示されるようになりましたが、グラフの形が変わってしまう問題に直面しました。具体的なプログラムは、指定のデータでグラフを作成し、日付データをX軸に設定するといった流れで組んでいます。どのようにすれば、X軸の目盛りラベルのみ変更(表示)させることができるのでしょうか。
  • ExcelのVBAを使用してデータの時間経過の折れ線グラフを作成しています。しかし、X軸に日付の目盛りを表示させる方法がわかりません。既存のデータでグラフを作成した後、日付データをX軸に設定しましたが、グラフの形が変わってしまいました。グラフの表示形式を変えずに、X軸の目盛りラベルのみ変更(表示)させるにはどのようにすれば良いのでしょうか。
  • ExcelのVBAを使ってデータの折れ線グラフを作成しようとしています。X軸に日付の目盛りを表示させるために、マクロを記録して追加プログラムを書いていますが、グラフの形が変わってしまいます。具体的なプログラムは、指定のデータでグラフを作成し、日付データをX軸に設定するといった流れです。X軸の目盛りラベルのみ変更(表示)させる方法を教えてください。

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

  • ベストアンサー
  • TTak
  • ベストアンサー率52% (206/389)
回答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にて動作確認-

mygsk
質問者

お礼

毎度、ありがとうございます。 今晩また試してみます。 スムーズな線がゴツゴツになってしまう例として、X軸系列 の増分が一定でないことが考えられます。 確かに、祝日、土日のデータが抜けているので、それが 原因かも知れません。

その他の回答 (3)

  • TTak
  • ベストアンサー率52% (206/389)
回答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

mygsk
質問者

お礼

TTakさん、 昨日ご回答頂いたサンプルコードをコピーして試したところ、 .MinimumScale = stTime.Value のところでエラーが発生してしまいます。 .MaximumScale = edTime.Value のところでもエラーが発生すると考えられます。最初は変数もしくはコーディングの間違えと思い色々と検討してみましたが結局駄目でした。デバッグで変数の値をチェックしてみるとstTime,edTimeともにcells(50,1), cells(150,1)の値が入っていることは確認しました。エラーメッセージは次のようなダイアログが表示されました。 「AxisクラスのMinimumScaleプロパティを設定できません」 何か心当たりはありますか? MajorUnit = n / 10 は、なかなかわかりやすかったです。

  • TTak
  • ベストアンサー率52% (206/389)
回答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にて動作確認済み-

mygsk
質問者

補足

私の質問の仕方が悪い様で、誤解されたと思います。 X軸の最小値(例えば0)、最大値(例えば100)の設定に加え、目盛り間隔を10にして10個の目盛りラベルをふるということです。目盛り間隔を5にした時は20個の目盛りラベルをふることになります。この様な設定を軸の設定と同様にコーディングしたいということです。 PS、Activate methodは遅いのですか?、今後、極力使用しない様に心がけます。 参考になりました。今回の回答頂いたFor - nextのループ処理をFor each - nextステートメントに変えると処理時間の短縮につながると思います(全ての対象オブジェクトに対してループ処理を行う場合)。

  • TTak
  • ベストアンサー率52% (206/389)
回答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にて動作確認済み-

mygsk
質問者

お礼

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