マクロでグラフの最大値と最小値を変更する方法

このQ&Aのポイント
  • シート内に複数のグラフがあり、あるセルに入力した数字を元にマクロを実行すると、グラフの最大値と最小値が変わります。マクロ内では、指定されたセルの値を取得し、グラフの軸の最大値と最小値を設定します。
  • このマクロを使うことで、グラフの表示範囲を任意に変更することができます。たとえば、小数点以下の桁数を変更したい場合は、指定されたセルに小数点以下の桁数を入力してマクロを実行すれば、グラフの最大値と最小値が変更されます。
  • このマクロは、ExcelのVBAプログラミング言語を使用しています。マクロを実行することで、グラフの表示範囲を簡単に変更することができるため、グラフを使ったデータの可視化や分析に役立ちます。また、マクロ内の各プロパティを調整することで、グラフの外観や表示方法をカスタマイズすることも可能です。
回答を見る
  • ベストアンサー

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

シート内に複数のグラフがあり、 あるセルに数字を入れてマクロを実行するとグラフの最大値と最小値とレンジが変わるように してあります。下のマクロです。 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"とか入力して変更できれば一番良いかなと思っております。 まだ初心者のため、情報不足がありましたらすぐに補足しますので、 なんとか宜しくお願いします。

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

  • ベストアンサー
  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.2

NO.1 です。 貴マクロに組み込んだ場合の動作は、貴マクロの全体がわかりませんので私の環境で試すことができません。 貴マクロに組み込むのではなく、つぎのマクロを単独で、実行してみてください。 こちらはExcel 2010 と2016 で動作することを確認済みです。 -------------------------------- Sub Macro1() ActiveSheet.ChartObjects("グラフ 1").Activate DD = Range("B2") + 1 FFormat = Choose(DD, "#,##0", "#,##0.0#", "#,##0.00", "#,##0.000", "#,##0.0000", "#,##0.00000") ActiveChart.Axes(xlValue).Select Selection.TickLabels.NumberFormatLocal = FFormat End Sub -------------------------------- Chart の名称は、 グラフ 1 セルB2 に0,1,2,3,4,5 のいずれかを入れて実行してみてください。 それで動作するなら、つぎの部分を貴マクロに組み込めば良いと思うのですが? -------------------------------- DD = Range("B2") + 1 FFormat = Choose(DD, "#,##0", "#,##0.0#", "#,##0.00", "#,##0.000", "#,##0.0000", "#,##0.00000") ActiveChart.Axes(xlValue).Select Selection.TickLabels.NumberFormatLocal = FFormat -------------------------------- 「単独なら動くが、組み込むとダメ」で解決方法が見つからない時は、貴マクロからMacro1 をCall してみてください。 貴マクロのEnd With の前に、Macro1 と記述するだけです。 すでにMacro1 というマクロがあるばあいは、Macro1 を適当な名前に変更してください。 お詫び 前回の回答で、 FFormat = Choose(DD, "#,##0", "#,##0.0#", "#,##0.00", "#,##0.000", "#,##0.0000", "#,##0.00000) の後ろの二つのフォーマット定義がどちらも #,##0.0000 になっていました。 マクロはが動作ますが、これでは、セルB2 に4を入力しても、5を入力しても小数点以下の桁数が4 になります。

yomi0952
質問者

お礼

無事に動かすことが出来ました。 丁寧に教えていただき助かりました。 ほんとにありがとうございました。

その他の回答 (2)

回答No.3

横槍を失礼しますが・・ Sub SAMP() Dim obj As ChartObject Dim myStr As String     myStr = "#,##0"         If Range("B2") <> 0 Then myStr = myStr & "." & String(Range("B2"), "0")     For Each obj In ActiveSheet.ChartObjects         With obj.Chart.Axes(xlValue)             .TickLabels.NumberFormatLocal = myStr             .MinimumScale = Range("B3").Value             .MaximumScale = Range("B4").Value             .MinorUnit = Range("A3").Value             .MajorUnit = Range("A4").Value         End With     Next End Sub こんな感じでも出来そうな気がします。

yomi0952
質問者

お礼

こちらのマクロでも試してみたいと思います。 非常に勉強になります。 ありがとうございました。

  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.1

セルB2 に小数点以下の桁数(0~5まで)を入力しておきます。 Sub Macro1() DD = Range("B2") + 1 FFormat = Choose(DD, "#,##0", "#,##0.0#", "#,##0.00", "#,##0.000", "#,##0.0000", "#,##0.0000") ActiveChart.Axes(xlValue).Select Selection.TickLabels.NumberFormatLocal = FFormat End Sub 貴作成のマクロに組み込むときは、つぎのようにすると良いと思います。 Sub xxxx()   ・   ・   ・   ・ DD = Range("B2") + 1 FFormat = Choose(DD, "#,##0", "#,##0.0#", "#,##0.00", "#,##0.000", "#,##0.0000", "#,##0.0000") .TickLabels.NumberFormatLocal = FFormat   ・   ・   ・   ・ End Sub 小数点以下の桁数を入力するセルB2 は適当に変更します。

yomi0952
質問者

補足

回答ありがとうございます。 追加質問ですみません。 教えていただいたとおりマクロに組み込みましたが、 FFormatの行で、 実行時エラー424 オブジェクトが必要です、とエラーが出ます。 なにか他に変更しないといけない部分があるんでしょうか? 初心者で申し訳ありませんが宜しくお願いします。

関連するQ&A

  • 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 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」の様に表記できないでしょうか。 よろしくお願いします。

  • 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について(グラフ操作)

    現在、会社の端末が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のグラフの目盛について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 こんな感じらしいんですけど私は全くマクロが分かりません、、。なにか良い方法はありませんか?

  • エクセルのマクロでアクティブシート内の選択した複数のグラフのみ軸の目盛を変更

    エクセルのマクロで教えてください。20個のグラフを一つのシートに作成しますが、この20個の散布図グラフの中から、クリックして選択したグラフだけ、y軸の目盛を自動スケールで最大値、最少値、目盛間隔の分割数は5個に自動にできないでしょうか? いくつか質問サイトを調べて、以下でアクティブシートのすべてのグラフ(20個)をセルに入力された値に一括で変更することはできるのですが、クリックして選択したグラフだけ、上記のようにできません。よろしくお願いします。 Sub 全部() Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("A1").Value '最小値 .MaximumScale = Range("A2").Value '最大値 .MajorUnit = Sheets("Sheet1").Range("A3") '目盛間隔 End With End With Next End Sub

  • エクセルのマクロで教えてください。仕事で、種類の異なる20個のグラフを

    エクセルのマクロで教えてください。仕事で、種類の異なる20個のグラフを一つのシートに作成しますが、2個だけ内容が異なるグラフになってします この20個の散布図グラフで、クリックして選択したグラフだけ、y軸の目盛を自動スケールで最大値、最少値、目盛間隔の分割数は5個に自動にできないでしょうか? このサイトなどいくつか調べて、以下でアクティブシートのすべてのグラフ(20個)をセルに入力された値に一括で変更することはできるのですが、クリックして選択したグラフだけ、上記のようにできません。よろしくお願いします。 Sub 全部() Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("A1").Value '最小値 .MaximumScale = Range("A2").Value '最大値 .MajorUnit = Sheets("Sheet1").Range("A3") '目盛間隔 End With End With Next End Sub

  • 等高線グラフの書式を設定するマクロ

    Excelの等高線図を使って温度分布図を作成しています。 (ある温度以上では赤,ある温度以下では青,というように) その図作成の手順は データ範囲選択→等高線グラフ作成→温度幅(目盛り幅)設定→各温度幅での色の変更 となっています。 この作成手順をマクロ登録しており,上の手順で温度幅の設定までは登録・実行でき るのですが,色の変更操作は登録してもそれについての記述がされません。 今下のようにコードされています。 ActiveSheet.Shapes.AddChart.Select 'グラフを作成 ActiveChart.SetSourceData Source:=Range("'Sheet1'!$D$7:$Z$107") 'シート1のデータを使用 範囲選択 ActiveChart.ChartType = xlSurfaceTopView '等高線作成 ActiveChart.Axes(xlSeries).Select Selection.Delete ActiveChart.PlotBy = xlRows ActiveChart.HasAxis(xlValue) = True ActiveChart.Axes(xlValue).Select ActiveChart.Axes(xlValue).MinimumScale = 0 ’温度幅設定 ActiveChart.Axes(xlValue).MaximumScale = 30 ActiveChart.Axes(xlValue).MaximumScale = 110 ActiveChart.Axes(xlValue).MajorUnit = 10 ActiveChart.Legend.Select ActiveChart.Legend.LegendEntries(1).Select '色の変更 10個の凡例の色を一つずつ変えていきたい ActiveChart.Legend.LegendEntries(2).Select ActiveChart.Legend.LegendEntries(3).Select ActiveChart.Legend.LegendEntries(4).Select ActiveChart.Legend.LegendEntries(5).Select ActiveChart.Legend.LegendEntries(6).Select ActiveChart.Legend.LegendEntries(7).Select ActiveChart.Legend.LegendEntries(8).Select ActiveChart.Legend.LegendEntries(9).Select ActiveChart.Legend.LegendEntries(10).Select End Sub 上の通り凡例の色変更の部分で、色の情報などが記述されていないので ActiveChart.Legend.LegendEntries(1).Format.Fill.ForeColor.RGB = RGB(0, 0, 0) と入れてみたのですがこれを実行すると 実行時エラー’-2147467259 (80004005)': 'Fill'メソッドは失敗しました:'ChartFormat'オブジェクト と表示されます。 どこに問題があるのか,どのように変えればいいのか教えてもらえないでしょうか。

  • EXCELのグラフのy軸の表示形式をマクロで変更

    アクティブシート内のすべてのグラフのy軸の目盛りの表示形式を一括で変更したいです。 またその表示形式はセルA4で指定したいと考えています。 他の質問などを参考にし、最小値や最大値などもセルの値によって変えれるように以下のコードを書きました。 Sub 一括変換() Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("A1").Value '最小値 .MaximumScale = Range("A2").Value '最大値 .MajorUnit = Range("A3") '目盛間隔 End With End With Next End Sub セルA4には0、0.0、0.00といった形で指定したいです。 (ユーザー定義の書き方で指定したい) マクロを記録してやってみたりもしましたが、うまくいきません。 またセルに0.0といれてもセルの書式設定が標準の場合0になってしまうので、 書式設定を文字列に変えて、0.0としてやってみましたがうまくいがず・・・。 どのような式を入れれば良いのでしょうか? EXCELのバージョンが2000なので、このバージョンで動くコードでお願いしたいです。

  • エクセルチャート操作のマクロのエラー

    エクセルマクロ初心者です。グラフの縦軸をセルの値の変化に合わせて変化するよう(対照のセルはB1とB2で変化します。)下記のマクロをネット検索してモジュールに貼り付け機能するようになったのですが、シートに保護をかけると、「実行時エラー ー214767259(80004005): MaximumScaleメソッドは失敗しましたAxisオブジェクト のメッセージが出て機能しません。 Worksheet_SelectionChange(ByVal Target As Range) If Range(A1) <> "" Then Call AxesSet End Sub Sub AxesSet() Dim oChart As ChartObject Set oChart = Worksheets("Sheet1").ChartObjects(1) With oChart.Chart.Axes(xlValue, xlPrimary) .MaximumScale = Worksheets("Sheet1").Range(B1) .MinimumScale = Worksheets("Sheet1").Range(B2) .DisplayUnit = xlThousands .HasDisplayUnitLabel = False .MinorTickMark = xlInside End With End Sub 対照セルの保護の問題かと思い、セルのロックを解除したり、マクロから保護を解除するなど検索してみたのですが上手くいきません。シートを保護してもマクロが機能する解決方法お教えください。

専門家に質問してみよう