皆さんはエクセルでグラフを作っている際に最もイライラすることは何でしょうか?私は、プロットの色や線種を変更しようとして意図するプロットを選択できないことです。プロット同士が重なっているようなグラフの場合には絶望的です。そこで今回は、パネルマクロを用いてプロットを選択するマクロを作ってみました。望むグラフを作成するのに意外と役立つツールだと思います。
ユーザーフォームの作成
まずはパネルマクロの原型を作成します。

上図のようにVisual Basicのプロジェクトのところで右クリック、挿入、ユーザーフォームを選択します。

ユーザーフォームを選択すると上図のようなWindowとツールボックスが表示されるはずです。
背景色が灰色なのはちょっと気分が悪いので、変えてみましょう。

上図のプロパティウインドウのBackColorで変更できます。プロパティウィンドウが表示されていなければ表示から設定できます。また、ShowModalをFalseにしておきましょう。こうすることで、Userformを表示している間にシートを操作したりもできるようになります。

好みの色にしてみましょう。今回は青紫を選んでみました。
ラベルとスピンボタンの追加
ユーザーフォームにラベルとスピンボタンを追加します。ラベルに今選択しているプロットの番号を表示し、スピンボタンでその番号の変更を行います。

ツールボックスの上記の赤下線を押して、パネル上でクリックすれば作れます。

概ね上記のような見た目になるはずです。大きさはドラッグで変更できますし、スピンボタンは横方向を大きくすると、横向きにもできます。
ラベルを選択して、プロパティのCaptionに1を入れておきましょう。

見た目があんまりですが、後で調整します。
スピンボタンの設定
次に、スピンボタンの設定を行います。スピンボタンを押すとグラフのプロットを順番に選択していくようなコードを書きます。
まず、スピンボタンをダブルクリックすると以下のようなコードが表示されます。
Private Sub SpinButton1_Change()
End Sub
この中にコードを書くと、スピンボタンを押した際の動作になります。ちなみにスピンボタンの動作は0から100まで1ずつ変化するような設定がデフォルトになっていると思います。プロパティウインドウから最小値(Min)を1にしておきましょう。
実際にプロットを選択するコードは以下のようになります。
Private Sub SpinButton1_Change()
Dim i As Integer
Label1.Caption = SpinButton1 'スピンボタンで設定した値をLabel1に
If ActiveChart Is Nothing Then
Else
If SpinButton1 <= ActiveChart.SeriesCollection.Count Then
With ActiveChart
.SeriesCollection(SpinButton1).Select 'SpinButton1の値番目のプロットを選択
End With
End If
End If
End Sub
コードの解説
ここからは上記のコードの解説をします。
Labelにスピンボタンの設定した値を入れる
まず、Labelに表示されている番号をスピンボタンの数字と一致させます。以下のコードです。
Label1.Caption = SpinButton1 'スピンボタンで設定した値をLabel1に
動作としてはスピンボタンに応じてラベルの表示が変わっているように見えますが、実際にはLabelのキャプションにスピンボタンの設定値を入れているので、ひと手間掛かっています。
グラフを未選択時にエラー回避
当然ながら、グラフを選択した状態でないとマクロとしてはどのグラフのプロットを選択すればいいか分かりません。ですので、このマクロはグラフ選択時に使うはずですが、グラフ選択を忘れることも多いでしょう。そのような時にいちいちエラーが発生しては煩わしいので、If文で回避します。
If ActiveChart Is Nothing Then
Else
上記のコードはActiveChartがNothing、つまりグラフを選択しない時の動作をIf文で指定していますが、そこには何も記載していないので、何も起こりません。実際にはElse以下でグラフを選択している際の動作を指定しています。
プロットを選択
最後にプロットを選択します。
If SpinButton1 <= ActiveChart.SeriesCollection.Count Then
With ActiveChart
.SeriesCollection(SpinButton1).Select 'SpinButton1の値番目のプロットを選択
End With
.SeriesCollection(SpinButton1).Selectでグラフ中の”SpinButton1″番目のプロットを選択します。この際に、プロット数以上の値が入ってしまうとエラーが出るので、If文で回避しています。
また、0番目のプロットももちろん存在しないので、前述のようにSpinButton1が1以上になるようにSpinButtonのプロットで設定しています。
ユーザーフォームの呼び出し
実際にこのユーザーフォームを使うためにはエクセルから呼び出す必要があります。面倒ですが、このために新たにマクロを作成する必要があります。作成しているエクセルファイルに標準モジュールを挿入しましょう。そのうえで以下のコードを作ります。
Sub Test()
UserForm1.Show
End Sub
作成したUserForm1を表示するだけのマクロです。このマクロを実行することで、先ほどのユーザーフォームが呼び出されます。
最後にユーザーフォームの見た目を少し整えておきましょう。
LabelのプロパティからフォントをArial(または好きなフォント)、太字。フォントの大きさは適当な値にして、BackColorを白にすると見やすいでしょう。また、TextAllignもCenterにしておく方が見た目がいいと思います。下図のようになります。

実際の動作
今回作ったマクロを使うと下図のような動作になります。

Labelに2が表示され、2番目のプロットが選択されていることが分かると思います。プロットの元データも表示選択されるので、分かりやすいと思います。このマクロだけでは特に意味はありませんが、色を選択するマクロや線種を変えるマクロなどと組み合わせると非常に便利です。別の記事で紹介しようと思っています。また、作成したユーザーフォームは、別のエクセルファイルでも使うことができます。
マクロ有効ファイルとして保存
念のため注意ですが、マクロ有効Excelファイルで保存しておきましょう。保存時のダイアログのファイル形式で選択できます。これをやらないと折角作ったマクロが消えてしまいます。
まとめ
今回は初めてユーザーフォームを扱いました。グラフのプロットを選択するマクロはそれだけでは面白くありませんが、様々なマクロと組み合わせて作業を効率化ができる応用性が高いマクロだと思います。



コメント