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

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

Excel VBAでのグラフ

エクセルのVBAを用いてプログラムを書いているのですが、どうしてもわからないことがあるので教えて下さい。 あるデータの時間経過(推移)の折れ線グラフを自動的にチャートシートに作図させたのですが、X軸に日付の目盛りを表示させ忘れてしまい、X軸に日付の目盛りを表示させるようにマクロを記録し、それを基に手直しをして追加プログラムを書いているのですがうまく行きません。というのは、X軸に日付の目盛りを表示させることはできたのですが、それに伴い、チャートの形が変わってしまうのです。グラフの種類は折れ線でサインカーブの様なスムーズな線が角張ったゴツゴツした感じの線になってしまいます。これってバグでしょうか? 具体的なプログラムは、Range(cells(50, 2), cells(150, 5))のデータでグラフを作成し、その後、Range(cells(50, 1), cells(150,1))の日付データをX軸に設定するといった感じで組んでいます。グラフの表示形式を変えずに、X軸の目盛りラベルのみを変更(表示)させるにはどのようにすれば良いでしょうか

  • mygsk
  • お礼率45% (22/48)

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

  • ベストアンサー
  • 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

  • エクセルで折れ線グラフを書くとき

    お世話になります。 エクセルで折れ線グラフを書くときに、X軸のデーターが1から30までありますが、1番目のグラフで1から15まで、2番目のグラフで16から30までのデーターを表示させるのですが、2番目のグラフのX軸目盛りを16と表示させたいのですが、1と表示されます。 16と表示させる方法はどうしたらいいでしょうか。

  • エクセルのグラフの目盛りについて

    エクセルのグラフで二軸上の折れ線グラフを用いてグラフを描いたところ、プロットのデータに対応した値しかx軸の目盛りに表記されません。プロットにかかわらず、x軸の目盛りを取りたいのですが、どうやったらよいのでしょうか?

  • エクセルの折れ線グラフで、主目盛線上にデータ値をプロットしたい。

     エクセルの折れ線グラフを作成する場合、X軸の主目盛線上にデータ値をプロットさせる方法を知りませんか?  通常で作成すると、X軸の副目盛線上にはデータ値がプロットされますが、主目盛線上にはプロットされません。  主目盛線を表示せずに、副目盛線のみを表示させる事は出来ませんか? 下手な質問方法ですいません。判っていただけますか?

  • エクセルの折れ線グラフで目盛り線上にマーカー

    エクセルで折れ線グラフを作っています。 X軸の目盛り線を表示させるとデータとデータの間に線が入ってしまうのですが、データ上に目盛り線を表示させることはできないのでしょうか? 散布図を使ってみることも検討しましたが、散布図だと軸に文字を設定できないようです。 説明がうまくできず申し訳ないのですが、解決策はないでしょうか。 よろしくお願いします。

  • エクセル 折れ線グラフ

    継続するデータを(例えば、1月~12月) 折れ線グラフで表示する場合、 まだデータが無い月(現在は7月なので、8月)は ゼロなので、グラフの線がX軸0(ゼロ)になります。 そのグラフの線を0(X軸ゼロ)にしないで、 7月で線が途切れるように表示させるには どうすればいいのでしょうか? うまく表現できませんが、よろしく御願いいたします。

  • VBA グラフX軸の変更

    A列:X軸(日付) H列:Y軸(値) といったようなグラフを作成するにはどのようなソースで組めばよいのでしょうか? 現在は以下のようなソースまで組めます。 あとは、A列の日付をX軸に設定するだけなのですが、コーディングがわかりません。 --------------------------------------------------------------- Dim chart1 As Chart Set chart1 = Charts.Add 'H列グラフ化 chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI)) chart1.ChartType = xlLineStacked chart1.HasLegend = False --------------------------------------------------------------- どなたかアドバイスいただければ幸いです。

  • excel 2007 グラフ 軸反転、2軸作成問題

    excel2007でグラフを作成していますが、X軸と表示データの向きがあいません。 次のようなデータ 日付 DataA DataB 現在 10 1234 8/15 12 1020 8/16 09 1010 (1)まず、上記前データを一般的な折れ線グラフで表示します。 (2)X軸には日付が表示されますが、最新のデータは右側にしたいので  軸の書式設定で、「軸の反転する」をチェックし、反転させます。 (3)DataAないしDataBの一方をデータ系列の書式設定で、「第2軸」にします。そうすると、Y軸の目盛りが新規に作成されますが、「第2軸」にしたデータのみ折れ線グラフの表示が逆転し、X軸の日付と、実際のグラフ表示のデータの位置が一致しなくなります。 さて、解決方法は? ちなみに、excel 2003以前のバージョンでは問題は発生しません。 よろしくお願いします。

  • エクセルの折れ線グラフについて

    エクセルの折れ線グラフで目盛り上に日付を表示したいのですが、データラベルで日付を表示することができました。しかし、セルに設定した日付を表示することができません。目盛り上に現在日付ではなく入力した日付を設定することは可能でしょうか?

  • エクセルでこんなグラフ

    x y 0 0 1 90 2 100 3 90 4 100 5 90 上のようなデータで線グラフを作りたいのですが、 どうすればよいのでしょう? 「折れ線グラフ」ではx軸を0にできないし、 「散布図」ではx=1~2のところで、 yの値は100を超えたくないにもかかわらず、 超えてしまいます。どうすればよいでしょうか?

  • VBAでのグラフ作成について質問です。

    VBAでのグラフ作成について質問です。 Sheet1のA2:A10にx軸の値、Sheet1のD2:D10にy軸の値を設定した折れ線付き散布図を作成したいと思い、以下のようなマクロを組みました。 Sub Test() Dim chart1 As Chart Set chart1 = Charts.Add chart1.SetSourceData Worksheets("Sheet1").Range("A2:A10, D2:D10") chart1.ChartType = xlXYScatterLines End Sub 実行してみると、x軸に設定したセルがy軸の値になってしまい、 xの値が空欄の2つの折れ線グラフが現れてしまいます。 A2:A10をx軸の値に、D2:D10をy軸の値にしてグラフを作成するには上記のマクロをどのように変更すればよいのでしょうか?

専門家に質問してみよう