• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:グラフのサイズを揃えたいのでVBAを使っていたのですが、数値軸の最大値)

グラフのサイズを揃えるためのVBAマクロ

このQ&Aのポイント
  • Excelのグラフのサイズを揃えるためにVBAを使用していますが、数値軸の最大値の違いにより、プロットエリアの幅が揃いません。
  • データを取得するVBAマクロを使用して、グラフのサイズを調整しています。しかし、最大値が異なる場合、横幅が揃わないため、グラフの箱部分のサイズを揃える方法を模索しています。
  • 手動でグラフのサイズを揃えるには大変な作業量がかかるため、他の方法を探しています。アドバイスをお願いします。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

>回答番号:No.2 この回答への補足 >.InsideLeftなどは、取得のみで設定ができないようなのですが >書いて頂いたものも、やはりエラーで回りません。 「エラーになる」という報告だけでなく、その内容と発生行を教えて頂くと状況把握の一助になります。 しかし、残念ながらExcel2003を持っていないので確認することができません。 試しに、私が提示したコードで、Insideという文字列を全て外してみればどうなりますか。 ≪例≫ piw = ActiveChart.PlotArea.InsideWidth pil = ActiveChart.PlotArea.InsideLeft を piw = ActiveChart.PlotArea.Width pil = ActiveChart.PlotArea.Left とか With ActiveChart.PlotArea .InsideLeft = mxpil .InsideWidth = piw - (mxpil - pil) End With を With ActiveChart.PlotArea .Left = mxpil .Width = piw - (mxpil - pil) End With のようにして試してみてください。 あと、gen_sailさんが書かれたコードでは、PlotAreaのサイズを設定するだけになっています。 座標(PlotArea.Left、PlotArea.Top)を考慮する必要があると思います。 更に、数値軸ラベルの桁数による差を吸収する手立てを考えなければならないと思います。

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

ActiveChart基準で書いてみました。 グラフは 同一ワークシート上にある複数の埋め込みグラフ を対象にしています。 Excelのバージョンは問題ないと思います。 試してみてください。 Dim cht As ChartObject Dim piw As Double Dim pil As Double Dim mxscl As Double Dim mxpil As Double piw = ActiveChart.PlotArea.InsideWidth pil = ActiveChart.PlotArea.InsideLeft For Each cht In ActiveSheet.ChartObjects With cht.Chart If mxscl < .Axes(xlValue).MaximumScale Then .PlotArea.InsideLeft = 0 mxpil = .PlotArea.InsideLeft mxscl = .Axes(xlValue).MaximumScale End If End With Next With ActiveChart.PlotArea .InsideLeft = mxpil .InsideWidth = piw - (mxpil - pil) End With For Each cht In ActiveSheet.ChartObjects cht.Width = ActiveChart.Parent.Width cht.Height = ActiveChart.Parent.Height With cht.Chart.PlotArea .InsideLeft = mxpil .InsideTop = ActiveChart.PlotArea.InsideTop .InsideWidth = ActiveChart.PlotArea.InsideWidth .InsideHeight = ActiveChart.PlotArea.InsideHeight End With Next Web上で拾われたコードなら、ソース元のURLを貼っていただくと良かったと思います。 あるいは、編集中のコードがあるなら、コード全体を提示し相談して頂く方が良いと思います。

noname#124388
質問者

補足

≫xls88さん わざわざ記述頂きありがとうございます。 前の細くにも書かせて頂きましたが、.InsideLeftなどは、取得のみで設定ができないようなのですが 書いて頂いたものも、やはりエラーで回りません。 現状以下のように記述しています。 Sub SameSize_Set() Dim chtH As Double '// 基準のグラフの高さ Dim chtW As Double '// 基準のグラフの幅 Dim chtPH As Double '// 基準のプロットエリアの高さ Dim chtPW As Double '// 基準のプロットエリアの幅 Dim cot As Integer '// グラフのカウンタ Dim cht As Object '// 処理をする対象のグラフ '// データを取得 With ActiveChart chtH = .Parent.Height chtW = .Parent.Width chtPH = .PlotArea.Height chtPW = .PlotArea.Width End With 'グラフ、プロットエリアの高さ/幅を揃える For Each cht In ActiveSheet.ChartObjects With cht .Height = chtH .Width = chtW .Chart.PlotArea.Height = chtPH .Chart.PlotArea.Width = chtPW End With Next End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Excel2007で確認しています。 PlotAreaには InsideLeft InsideTop InsideWidth InsideHeight があります。これを使ってサイズを決めた方が良いようです。 ActiveChartを基準にするとして (ChartObjectsのIndexとか名前を使えばActivateしないコードに出来ます) 各グラフの数値軸の最大値を比較しその最大値を取得 最大値のグラフのPlotAreaのInsideLeftを基準にする ActiveChartのPlotAreaのInsideWidthを最大値のグラフのPlotAreaのInsideLeftを基準に補正する。 その後ActiveChartのPlotAreaのInside・・・値を基準にする。 大雑把な回答ですがこんなことでどうでしょうか。 質問文で提示されたコードがかける御方ですから大丈夫だと思います。

noname#124388
質問者

補足

すみませんバージョンを表記し忘れましたが、Excel2003でやりたいと思っています。 InsideLeft InsideTop InsideWidth InsideHeight このコードは、先日発見したのですが・・・取得のみで設定ができないようです。 手元に2007がないため確認できていませんが、2007では設定が可能なのでしょうか? インターネットで検索したのですが、残念ながら見つけられずよろしければ教えて頂けますか。 お願いします。

関連するQ&A