Excel VBAに手を出してみる-その4

主にグラフ作成について。ここではExcel VBAで,グラフを自動で描画しよう(データ範囲を動的に変える)Excel VBA:グラフ操作関連のテクニックを参考にした。

結果が出力された列を1列選択して、散布図を作成するボタンを作る

グラフ化するか否かは任意にしたいので、これまでの“計算”という機能に加えて“グラフ作成”という機能を独立して作りたい。この場合、プロシージャを複数用意するのか、モジュールを複数用意するのかどちらなのだろうか。。。

結局、どちらでも良いらしい。Moduleはcで言う.cファイルに相当して、プロシージャは関数に相当すると考えれば良い。いずれにせよ機能分割する場合は変数のスコープも考えなければならず、詳しくは[Excel2013 で VBA] プロシージャと変数で説明されていた。今回はModule1内にグラフを出すSubプロシージャを追加してみる。スケルトンだけ作ったら勝手に水平線が引かれた。デバッグはModule単位でしか実行できなかったら嫌だなと思ったら、何とプロシージャ単位で実行できた。

ここでもデータが書いてある範囲を自動的に見極めて、その範囲に応じたグラフを作るようにする。

 

<あとで記載>

 

縦軸の目盛りを内側に表示したい・・・が、やり方が分からない

マクロの記録を使ってみる。マクロの記録>記録終了して、マクロアイコンから記録したコードを確認すれば良い。今回は以下の項目を内向きにしたときのコードを記録。

以下が記録された。

Selection.MajorTickMark = xlInside

Selectionプロパティはアクティブウィンドウで現在選択されているオブジェクトを返すらしい。確かに軸を選択してからマクロの記録をしたためそうなるが、ここでは明示的にグラフを指定することにする。その場合は以下のようにすれば良い。

.Chart.Axes(xlValue).MajorTickMark = xlInside

ちなみに目盛り軸の向きは、

  • .MajorTickMark = xlInside  内向き
  • .MajorTickMark = xlOutside 外向き
  • .MajorTickMark = xlCross  交差
  • .MajorTickMark = xlNone   なし

のようだ。軸の設定については左目盛の文字調整でいくつか紹介されていた。