2024/10/21

Notes - Excel 連携:#42)PlotArea とサイズ

前回から、”使える”グラフにするための操作をまとめています。今回は具体的なコーディングに入る前に、グラフの作画エリアの挙動を確認します。


作画エリアの操作

Excel のグラフを作画しているエリアは VBA で PlotArea オブジェクトとして管理されています。オブジェクトの取得は Chart オブジェクトの PlotArea プロパティから取得します。

Chart.PlotArea プロパティ (Excel)

PlotArea オブジェクト (Excel)


作画エリアのサイズ調整は PlotArea オブジェクトのプロパティから行います。上記リンク先を眺めるとサイズにかかわるプロパティが 2 セット存在します。

Height InsideHeight
Left InsideLeft
Top InsideTop
Width InsideWidth

それぞれの違いについて理解する必要がありそうです。ヘルプを確認すると、次の通り記載されていました。グラフ領域とグラフの端、プロット領域の違いが不明瞭ですね...

Left グラフ領域の左端までの距離
InsideLeft グラフの端からプロット領域の左端までの距離


Left と InsideLeft の違い

ヘルプだけではよくわからないので、各プロパティの値をメッセージボックスで確認します。あわせて、軸エリアの幅も表示させてみました(以下の画像は合成して作成)。

InsideLeft がおおよそ 24、軸エリアの幅が 23 となっています。この結果より、InsideLeft には軸エリアを含んだ値であることがわかりますので、Inside* プロパティが指し示すエリアは下図の赤枠の部分で、ヘルプで言う ”プロット領域” だと推察できます。

Left や Width が指すのは、軸エリアを含む緑枠のエリアのようです。ただ、今一つ不明瞭なので点線としています。

少なくともX軸とY軸の交点を固定するためには、Inside* プロパティを使えはできそうですね。


幅の操作

プロット領域の位置を調整するテストをしていて設定どおりにならないことが、何度もありました。これは位置の設定はグラフ領域を超えないからです。

例えば、事例に上げているグラフでは、グラフ領域はほぼエリアいっぱいに設定されています。この状態で Left プロパティに 100 をセットしても、実行後の Left の値は 18 となりました。デフォルトの状態で右側にあったマージンの分だけ、右側に移動したということだと思います。

このように範囲外の数値を設定した場合、エラーも発生させず、適当な値に設定されます。希望通り配置できないことがあれば、各プロパティの値を表示させ確認しないと、バグなのか計算間違いなのか判定しづらくなります。

私は、通常 Pixel で考えるのですが、これらプロパティの単位はすべて Point ととなります。これも、状況を複雑にさせる要因ですね。Excel の単位については、以前まとめたので以下のリンクをご確認ください。

#35)Excel で使用する単位と変換


位置合わせの謎

次の実験は、Inside* プロパティで位置をセットしたグラフを画像にした場合、希望通りの位置に配置されるかを確認します。

テストとしては、InsideWidth = 400 にセットしてから、InsideLeft = 50 にセットします。グラフ領域のサイズが 500 なので、中央に配置する算段です。

その結果は次の通りでした。

いい感じなのですが、微妙に右にずれているような気がします。そこで、このグラフをペイントにコピペして、サイズをチェックします。

すると次の通りでした。

やはり右にずれていますね。プロット領域の 535 ピクセル は 401.25 ポイントなので、おおむね指定したサイズになっています。左の 72 ピクセルは 54 ポイントとなり指定通りとなっていません。

試しに、設定後のプロパティを表示したところ、50 ポイントとなっています。

前述のテストで不明瞭だった Left の値は約 27 となっており、軸エリアの幅を足すと InsideLeft と合致します。よって、Left に起因する問題ではなさそうです。


現時点では残念ながら原因は不明でした。少し右にずれるという点を認識して先に進めます。原因が判明したら別途レポートさせていただきます。


まとめ

今回は、プロット領域 PlotArea について調査しました。一部不明瞭な点がありましたが、軸をそろえることは今回の調査の範囲で実現できそうです。

次回からは、この情報を活用しつつ、実際にコーディングしていきます。


前回 DXL Step-by-Step


0 件のコメント:

コメントを投稿