VBA Graph描画でのマーカ設定

このQ&Aのポイント
  • EXCELのVBAでGraphを描画します。複数ノーマーカの曲線を描画します。
  • マーカの設定によって目盛ライン枠が移動する現象が発生します。
  • 目盛ラインの設定はX軸とY軸に対して行われます。
回答を見る
  • ベストアンサー

VBA Graph描画でのマーカ設定

EXCELのVBAでGraphを描画します。 下記設定で Dim objChart As ChartObject Dim charGraph As Chart Set charGraph = objChart.Chart charGraph.ChartType = xlXYScatterLinesNoMarkers charGraph.HasLegend = True 複数ノーマーカの曲線を描画します。 charGraph.SeriesCollection(counter).XValues = X charGraph.SeriesCollection(counter).Values = Y 一点だけのマーカの線を描画すると、目盛ライン枠が移動します。 以前書いた曲線は外枠にはみ出します。そのマーカの部分を コメントするすると、正常になります。マーカの曲線を書いても 同じ現象になります。 目盛ラインの設定は以下のようになります。 'X軸の設定 With charGraph.Axes(xlCategory) .MaximumScale = 18 .MinimumScale = 0 .MajorUnit = 1 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone .HasMajorGridlines = True .HasMinorGridlines = False .TickLabels.Font.Size = 10.25 .TickLabels.NumberFormatLocal = "0_ " With .MajorGridlines.Border .ColorIndex = 57 .Weight = xlHairline .LineStyle = xlDot End With End With 'Y軸の設定 With charGraph.Axes(xlValue) .MinimumScale = 0.4 .MaximumScale = 1.6 .MajorUnit = 0.1 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone .HasMajorGridlines = True .HasMinorGridlines = False .TickLabels.Font.Size = 10.25 .TickLabels.NumberFormatLocal = "0.0" With .MajorGridlines.Border .ColorIndex = 57 .Weight = xlHairline .LineStyle = xlDot End With End With '凡例の設定 With charGraph.Legend .AutoScaleFont = False .Font.Size = 10.25 End With どうぞ、よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

「・・になります」と言うだけでなく、何がどうなってほしいのか、質問の文章で説明のこと。 (質問者が作ったコードは参考程度に挙げるべきものだ。正しいコードを勉強して自分で、改良すべき個所は勉強のこと。)

yokoyokodragon
質問者

お礼

補助します。下記設定はセールからの読み出しなど正式な記述しても、同じ問題は出ます。 charGraph.SeriesCollection(counter).XValues = X charGraph.SeriesCollection(counter).Values = Y

yokoyokodragon
質問者

補足

ご指摘をありがとう。マーカつけても枠にはみ出してたくないので、いろいろ調べましたが、 うまくいきません。

関連するQ&A

  • Excel VBAについて質問します。

    Excel VBAについて質問します。 以下にX軸の日付範囲に、一日分の長さを取ってグラフを書かせる、プログラム文があります。 ============================ With ActiveChart.Axes(xlCategory) .MinimumScale = 40164.5 .MaximumScale = 40165.5 .MinorUnitIsAuto = True .MajorUnit = 0.0833333333 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With ============================ この中で、「.MinimumScale = 40164.5」と、「.MaximumScale = 40165.5」の部分の書き方について質問します。 グラフの日付範囲を指定するときに、「40164」や「40165」の様に書くと、一目で何月何日なのか分かりにくいので、 「2000年1月2日3時4分」や「2000/1/2 03:04」の様に表記できないでしょうか。 よろしくお願いします。

  • マクロで小数点以下の桁数を変更

    シート内に複数のグラフがあり、 あるセルに数字を入れてマクロを実行するとグラフの最大値と最小値とレンジが変わるように してあります。下のマクロです。 ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.Axes(xlValue).Select With ActiveChart.Axes(xlValue) .MinimumScale = Range("W8").Value .MaximumScale = Range("W7").Value .MinorUnit = Range("W9").Value .MajorUnit = Range("W10").Value .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With これに仕様追加したいのが、小数点以下の桁数を任意に変更したい、と言うことです。 通常が5だとすると、マクロ実行で5.0、5.00、5.000など。 小数点以下1桁なら"1"とか入力して変更できれば一番良いかなと思っております。 まだ初心者のため、情報不足がありましたらすぐに補足しますので、 なんとか宜しくお願いします。

  • Excel2003マクロ(グラフ)が2007エラー

    お世話になります。 Excel2003で作成したマクロ(グラフの縦軸を調整)が2007でエラーになり困っています。 マクロは既に作成されているグラフの縦軸の最大値、最小値、目盛間隔を変更するものです。 マクロの記録を元に作成しました。 ActiveSheet.ChartObjects("lv" & chart_count).Activate (ここまではエラーにならず、グラフが選択された状態になりました。) With ActiveChart.Axes(xlValue) ←この行でエラーになります .MinimumScale = lower_limit .MaximumScale = upper_limit .MinorUnitIsAuto = True .MajorUnit = interval .Crosses = xlCustom .CrossesAt = lower_limit   .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With 2007でもマクロの記録をして、何も変更せずに実行してみたのですが ActiveChart.Axes(xlValue).select のところでエラーになりました。 何も変更せず、記録したまま実行してもエラーになるので、何が悪いのか全く分からず困っています。 どなたかマクロに詳しい方、教えて頂けませんでしょうか。

  • Excelのグラフの目盛について2

     お世話になっていますHUKAHIREです。昨日、目盛線を制限したいんですけど、、、って質問したんですけどなかなか良い方法はなさそうで、やはり目盛間隔で線を引くしかなさそうですね。  それで質問なんですけどExcelのセルに値をセットしておいて、それを自動で目盛間隔と目盛最大値、最小値のプロパティに設定できる方法はありませんか?  マクロでは ActiveChart.Axes(xlValue).MajorGridlines.Select With ActiveChart.Axes(xlValue) .MinimumScaleIsAuto = True .MaximumScaleIsAuto = True .MinorUnitIsAuto = True .MajorUnit = 0.2 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With こんな感じらしいんですけど私は全くマクロが分かりません、、。なにか良い方法はありませんか?

  • ExcelのVBAについて(グラフ操作)

    現在、会社の端末がOffice2010と2003が混在している状態にあります。今のところ2003で作成されたファイルがほとんどです。 そこで問題が出てきたのですが、2003で作成したBookに埋め込みグラフとそれを操作するVBAがあり、そのVBAを2010のインストールされた端末で実行するとエラーが出てしまいます。コードは以下の通りです。 エラーの内容は、「'MinimumScale'メソッドは失敗しました: 'Axis'オブジェクト」 となります。Withの中すべてで同様のエラーが出ます。 ・ ・ ・ With ActiveChart.Axes(xlValue) .MinimumScale = 0 .MaximumScale = Data '事前に計算した値 .MinorUnitIsAuto = True .MajorUnitIsAuto = True .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With ・ ・ ・ 理由がよくわからなかったので、2010で同様のグラフを作成し、上記の操作をマクロに記録したところ、同様のコードが記録されました。 グラフ自体が2003と2010では違うものなのでしょうか? 解決方法がありましたら教えていただきたいです。

  • Excelでのグラフ作成用マクロについて。

    「新しいマクロを記録する」でグラフ作成用のマクロを作りました。 内容は、 1.sheet1のBC列を散布図でsheet2に出力。(4つほど別々のグラフを作成) 2.プロットエリアの拡大 3.図の位置調整・図の大きさ調整。(4つが重ならないように) というものです。 一応出来たのですが、何故か選択列を変更して(マクロ内の列選択を変更)出力・プロットエリア拡大までは出来るのですが、3が出来ません。 それで、分からないなりにマクロ内を覗いてみたところ、図の位置を調整する際に、対象となる図が ActiveSheet.Shapes("グラフ 17").IncrementLeft -177.75 などと言うように、グラフ17を参照してしまっているためにうまく動かないのだと思いました。 (そもそも、名前なんて付けていないはず・・・と思って調べていたら、どうやら「グラフウインドウ」で見ることが出来る名前を参照しているようでした。) いっそのこと、グラフをクリック・ドラッグで移動させるのではなく、出力する際に整然と並ぶように設定したいです。どうすればよいでしょう? 一応、作成したものを載せておきます。 ・1~2 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "mass" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "counts" End With ActiveChart.HasLegend = False ActiveChart.PlotArea.Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Selection.Top = 1 Selection.Width = 323 Selection.Height = 180 Selection.Left = 15 Selection.Width = 334 Selection.Height = 194 ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = 0 .MaximumScale = 50 .MinorUnitIsAuto = True .MajorUnit = 5 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With End Sub 3. ActiveSheet.Shapes("グラフ 17").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 17").IncrementTop -105.75 End Sub

  • Excelで、VBAを用いてのグラフ作成。1日ごとの範囲でグラフシート

    Excelで、VBAを用いてのグラフ作成。1日ごとの範囲でグラフシートを作成。それぞれのグラフのX軸の範囲を、グラフタイトル名とグラフシート名に設定したい。(使用環境 : Excel 2004 Mac 日本語版) Excel VBAに関して質問します。グラフの元になる「表1」シートには、次のように1分間隔でデータが入力されています。 #######ここから####### 日時 系列A 系列B 2010/3/1 12:00 0 5 2010/3/1 12:01 1 2 2010/3/1 12:02 1 5 2010/3/1 12:03 5 5 (中略) 2010/3/31 11:57 2 1 2010/3/31 11:58 5 1 2010/3/31 11:59 3 1 2010/3/31 12:00 5 100 #######ここまで####### この表を、2010年3月1日から2010年3月31日までの、1日ごとのグラフにしようと思います。 私は初め、「日時」セルから、最後の「100」セルまでを選択し、グラフウィザードからグラフシートを作成しました。このグラフシートを、すべてのグラフシートの大本になるグラフシートとして、「おおもと」と名付けました。 そうして次のVBAプログラムを書きました。 #######ここから####### Option Explicit Sub Macro1() ' ' Macro1 Macro '3月1日分 Sheets("おおもと").Select Sheets("おおもと").Copy Before:=Sheets(1) ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = #2010/3/1 12:00# .MaximumScale = #2010/3/2 12:00# .MinorUnit = 0.0416666667 .MajorUnit = 0.125 End With ActiveChart.Deselect '3月2日分 Sheets("おおもと").Select Sheets("おおもと").Copy Before:=Sheets(1) ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = #2010/3/2 12:00# .MaximumScale = #2010/3/3 12:00# .MinorUnit = 0.0416666667 .MajorUnit = 0.125 End With ActiveChart.Deselect (中略) '3月30日分 Sheets("おおもと").Select Sheets("おおもと").Copy Before:=Sheets(1) ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = #2010/3/30 12:00# .MaximumScale = #2010/3/31 12:00# .MinorUnit = 0.0416666667 .MajorUnit = 0.125 End With ActiveChart.Deselect End Sub #######ここまで####### 上記のVBAプログラムを実行し、一応グラフは描けたのですが、作成したそれぞれのグラフシートのシート名とグラフタイトル名が、それぞれのグラフの日時の範囲を反映したものとなっておらず、一見してどの日時範囲をグラフ化したものか読み取れず、難儀しています。 そこで、3月1日分から3月30日分までのグラフシートとグラフタイトル名を、それぞれの日付の範囲に即した物(たとえば3月1日分のグラフシートは、グラフシート名が「3月1日」、グラフタイトル名が「3月1日」)になる、VBAの書き方を教えて貰えないでしょうか。 長々とした質問ですが、どうぞ、よろしくお願いします。

  • 任意にデータの範囲を選択し、グラフを描画したい

    質問を閲覧していただきありがとうございます。 できればみなさんのお力を貸していただきたいことがあり、質問しました。 以下にマクロ作成に用いたプログラムの仕様とコードを貼りますので、ご指摘等いただけましたら幸いです。 まず、今回のマクロの目的は ・既に存在するエクセルデータから、x軸、y軸のデータ列の長さに応じたグラフを描画するVBプログラムを書く事 です。 ・可能ならば、既存のふたつのグラフを結合したものを新しく表示する ※データシートの画像は添付しましたのでご覧ください。 以上のふたつとなります。 理想形としては、 A2 ~ A1025までをx軸のデータ、B2~B1025までの実データ値としたグラフAを一つ D2 ~ E1025までをx軸のデータ、E2~E1025までの実データ値としたグラフBを一つ 上記二つのグラフを結合したグラフを一つ の3つのグラフが自動的に作成され、エクセルファイル上に表示されている といったような感じです。 私の書いたコードの問題点としては、 ・グラフAグラフBともに「x軸と実データが正しく対応していない」 →本来両方のグラフにおいてはグラフの右端まで折れ線グラフが続いているはずですが、x軸の値にして約1000の所でデータが終わってしまっています。 ・グラフBでは、D2 ~ D344, E2 ~ E344 を基にしたグラフ一つのみが描画されているはずですが、ここには何故か二つ以上の折れ線グラフがあるようにみえ、グラフB右には系列1~5までがあるように書かれています。(理想としては5個ではなく実データを示すもの一つのみ) ・ふたつのグラフの結合方法が不明 という感じです。 以下にプログラムを貼ります。 お時間ありましたら、ご指摘の程宜しくお願い致します。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub グラフ描画() chart_title1 = "グラフA" chart_title2 = "グラフB" '軸のタイトル x_title = "周波数[Hz]" y_title = "パワー" ' -------------------------グラフ作成---------------------- ' グラフを描画 Dim chartObj1 As ChartObject Set chartObj1 = ActiveSheet.ChartObjects.Add(1, 1, 300, 200) With chartObj1.Chart ' データ範囲をセット .SetSourceData Source:=Range(Range("B2"), _ Cells(2, 1).End(xlDown)) ' x軸の項目軸範囲をセット .SeriesCollection(1).XValues = Range(Range("A2"), _ Cells(1, 1).End(xlDown)) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .HasTitle = True .ChartTitle.Characters.Text = chart_title .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title ' x軸の最大値、最小値設定 .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).MaximumScale = 4500 ' y軸の最大値、最小値設定 .Axes(xlValue).MinimumScale = -10 .Axes(xlValue).MaximumScale = 3 End With Dim chartObj2 As ChartObject Set chartObj2 = ActiveSheet.ChartObjects.Add(1, 320, 300, 200) With chartObj2.Chart ' データ範囲をセット .SetSourceData Source:=Range(Range("E2"), _ Cells(2, 1).End(xlDown)) ' x軸の項目軸範囲をセット .SeriesCollection(1).XValues = Range(Range("D2"), _ Cells(1, 1).End(xlDown)) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .HasTitle = True .ChartTitle.Characters.Text = chart_title .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title ' x軸の最大値、最小値設定 .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).MaximumScale = 4500 ' y軸の最大値、最小値設定 .Axes(xlValue).MinimumScale = -10 .Axes(xlValue).MaximumScale = 3 End With End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • EXCEL VBA:埋め込みグラフオブジェクトの命名方法について (続き1)

    http://oshiete1.goo.ne.jp/qa3258443.html の質問の続きです。 ------------------------------------------------------------- Sub sample() Dim myRange As Range Set myRange = Range("A1:D2") With Worksheets("Sheet1").ChartObjects.Add(50, 50, 300, 200).Chart .ChartType = xlPie .SetSourceData Source:=myRange, PlotBy:=xlRows .ApplyDataLabels Type:=xlDataLabelsShowLabelAndPercent, LegendKey:=False, HasLeaderLines:=True End With End Sub ------------------------------------------------------------- この手法でグラフ作成した場合について、 1. グラフ作成時に以下と同じように NumberFormatLocal を設定する方法はありますか? (通常の記述例) ActiveChart.SeriesCollection(1).DataLabels.Select Selection.NumberFormatLocal = "0.0%" といいますのは、現在作成しているマクロはユーザーの操作によっては 円グラフと棒グラフが順不同に作成される場合があり、 SeriesCollection の INDEX番号 が分からない場合があるためです。 または、グラフの名前等を指定することなどにより、 SeriesCollection の INDEX番号 を取得する事が可能でしたら その方法を教えて頂きたいのですが・・・。 2. 同じく、グラフ作成時にデータラベルのフォントを設定する方法はありますか? (通常の記述例) With Selection.Font .Name = "MS Pゴシック" .Size = 10 End With 3. 同じく、横棒グラフ作成時に、以下と同じ事はできますか? '反転 ActiveChart.Axes(xlCategory).Crosses = xlMaximum ActiveChart.Axes(xlCategory).ReversePlotOrder = True '横軸100% ActiveChart.Axes(xlValue).MaximumScale = 1 以上、何卒ご教授のほど、よろしくお願い致します。

  • VBA 全グラフに適応されない理由

    お世話になっております。 Excel2003を使用しております。 1400個のグラフを自動作成しております。 -------------------------------- Function GlaphSetting() 'グラフ色などの設定 Dim C As ChartObject On Error Resume Next For Each C In ActiveSheet.ChartObjects ' C.RoundedCorners = True C.Chart.AutoScaling = False C.Chart.PlotArea.Interior.ColorIndex = xlNone C.Chart.PlotArea.Border.ColorIndex = xlNone 'プロットエリアの色を消す C.Chart.Axes(xlValue).MaximumScale = 5 'メモリ最大値 C.Chart.Axes(xlValue).MinimumScale = 0 'メモリ最小値 C.Chart.Axes(xlValue).MajorUnit = 1 'メモリ間隔 If ComboBox4.Text <> "" Then '氏名が入ってると、メモリ-1にしたい! C.Chart.Axes(xlValue).MinimumScale = -1 'メモリ最小値 C.Chart.PlotArea.Top = 50 C.Chart.PlotArea.Width = 100 C.Chart.PlotArea.Height = 100 C.Chart.PlotArea.Left = 50 End If If ComboBox4.Text = "" Then '氏名が空のとき C.Chart.Axes(xlValue).HasMajorGridlines = False End If C.Chart.ChartArea.Font.Size = 8 '全部のフォントサイズ Next End Function ---------------------------- 上記方法でフォントサイズの設定等を行っているのですが、 全グラフの文字サイズが8になっていなく、 ActiveSheet.ChartObjectsの個数は制限があるのか?なんて思っております。 間にプログレスバーの表示を行っておりますが、 しっかり全部動いているみたいであり、 1400個中、33個目くらいまでしか フォントサイズが変わっておりません。 ステップインで確認してみましたが、 ステップインだと33個以上も大丈夫な気がします。 何か、理由をご存知の方がいらっしゃいましたら 回答をお願い致します。