【表計算の福音~Excelでここまで出来る~ エクセル完全カスタマイズで販売予測・在庫管理システムを作ってみた】『購買くん』のVBA解説編 第2弾をアップしました。
テーマは「シェイプ(図形)のフル活用」です。Excelのシェイプ(=図形)をUser-Clickable Button/Iconとして活用したり、画面情報を補足する情報をタイムリーにポップアップ表示させたりする手法をご紹介しています。
下記リンクからご視聴ください。
要約
『購買くん』では、シェイプは主に2つの役割を果たしています。
- コマンドボタンとしての役割
- ユーザーに各種情報を伝える「ポップアップメッセージボックス」としての役割
の二つです。
シェイプをコマンドボタンとして使用する
本来Excelでコマンドボタン機能を提供するものに、フォームコントロールのボタンや、ActiveXコントロールのコマンドボタンがありますが、私の場合は、どちらも使いません。これらの出来ることはシェイプでも出来るし、デザインの自由さはシェイプにはかなわないからです。
さてコマンドボタンとしてのシェイプには基本2種類あります。一つは何をするのかがわかるようなテキストが書いてある長方形の図形です。もう一つは、アイコン型の図形で、その形状から大体何をするのかユーザーにも推測がつく、というようなものです。どちらもシェイプ(図形)であることには変わり有りません。
コマンドボタンとしてのシェイプの作成方法
1.まず「挿入」リボンの「図形」から好きな形を選び、ワークシートの配置したい場所にドラッグで形を描きます。その図形が選択されている状態で、リボンから「図形の書式」タブを選び、「塗りつぶし」「枠線」などを好みの設定に変えます。
また「サイズ」を拡張すると、より詳しい見た目の設定ができます。影の効果、塗りつぶしのグラデーション、半透明化などもできます。
さらに図形のプロパティの「セルに合わせて移動やサイズ変更はしない」を選択しておきます。これは、プログラムの働きによってレンジの削除をしても、シェイプがこれに連動して削除されたりしないようにするためです。
さて、図形の外観が出来たら、名前を付けます。図形を作成した直後には、エクセルが勝手に適当な名前を付けてくれますが、必ず自分で意味が分かるような名前に変更しておきましょう。名前を設定するには「ホーム」リボンから「オブジェクトの選択と表示」を選ぶと、アクティブなシート上のすべての図形が右側に一覧表示され、今画面上で選択されている図形がこの一覧リスト上でも選択されています。それを再選択して上書きします。ちなみにこのリスト上で「目玉」のマークを押すと、そのシェイプオブジェクトが表示されたり非表示になったりします。リスト上で1つを選択すると、シート状の図形も選択状態になります。
次に図形に「任務」というか役割、(つまり実行すべきプロシージャ)を与えます。
図形を右クリックして出るポップアップメニューから「マクロの登録」を選択するとマクロの登録ダイヤログボックスが現れます。「マクロの保存先」は「今作業中のブック」にします。上のリストボックスに、このブックの標準モジュールに存在するすべてのプロシージャ名が表示されているので、目的のプロシージャ名を選択してOKボタンを押します(ただし引数を取らないプロシージャは出てきません。また戻り値を返すFunctionで始まる関数も出てきません)。
以上で設定完了です。
Application.Callerでプログラムを分岐
Application.Caller、つまりApplicationオブジェクトのプロパティCallerの値は、呼び出し元の図形名を返します。これを使ってプロシージャ側で、呼び出し元の名前までわかれば、If~クローズや、Select Caseクローズでプロシージャ内でプログラムを分岐できます。これによって、ボタンごとにそれぞれプロシージャを作成しなければならないところを、統合できるところは統合可能となります。
また、Application.Callerを使えば、呼び出されたプロシージャ内で、呼び元のシェイプ名を介してそのシェイプオブジェクトを補足できます。これによってそのシェイプの位置や大きさ、中のテキストなどを操作することが可能ですからこれを使いこなすことでプログラムの可能性は大きく広がります。
アイコン型のシェイプ
アイコン型のシェイプは、それが何をするものかをテキストで伝えるのではなく、図形の形で伝えるものです。単純な四角形の代わりに複数の図形を組み合わせたうえでグループ化して作る方法や、「それはめんどくさい、、」という方は、挿入リボンから「アイコン」を開いて自分の目的に合うものを選択する方法もあります。Microsoft365を契約するともっと種類がいっぱい出てくるようです。また最近ではネット上に無料のアイコンショップが多数あるようですのでそれを利用するのもいいかもです。
例:
アイコン型のシェイプには「セルのメモ」を利用してヒント表示がおすすめ
アイコン型のシェイプはその形状から、何をする目的なのかがなんとなく想像できるとは言っても、シェイプの中にテキストで説明するのは困難なので、ユーザーは正確には知ることが出来ません。
Excelのシェイプオブジェクトには、マウスオーバーのようなイベントを設定することはできません。例えばアイコン型のシェイプの上にユーザーがマウスカーソルを持って行ったときに、「これは何をするものですよ」と知らせることが出来たら嬉しくないですか?そこでセルに設置するメモを利用します。
メモもシェイプの一種です。じつはグラフもシェイプの一種なのですが、それについてはまた別の動画で触れたいと思います。さてホームメニューの「オブジェクトの選択と表示」にはシートにある全てのメモも載っています。メモというのはたしかExcel2016までは「コメント」という名称だったように記憶していますが、Excel2019以降メモと呼ぶようになったようです。設定するとセルの右上に赤い三角メークがつくアレです。
アイコン図形の背後にあるセルにアイコンをクリックして起こるアクションをメモとして登録しておくと、例え背後であってもその付近にマウスカーソルを持っていくとメモがポコッと出てきます。なので、当たらずといえども遠からずの妥協としてお勧めです。あのセル右上コーナーに出る赤い三角が嫌な方はその上からセル背景色と同色の四角シェイプをかぶせて見せないようにします。(もちろんアイコンそのものより背後に置きます)。
動的シェイプ: ユーザーに各種情報を伝える「ポップアップメッセージボックス」としてのシェイプ
ここまで図形をコマンドボタンの代用として使う方法についてお話してきました。ここからは、ユーザーに何か情報を伝えるポップアップメッセージとして使う方法をご紹介します。
上述のシェイプはどれも、いわば「固定」のシェイプでした。ワークシート毎に定義され保存されたシェイプです。表示・非表示を切り替えたり位置をやサイズ、テキストを変えたり、といった図形の内容をVBAコードで実行時に操作することはできますが、オブジェクトとしてはそのシートに固有のオブジェクトとして恒久的に固定されています。
下記に紹介するのはもっと動的なシェイプです。基本的な考え方は、ワークシート(これは見えているシートでもユーザーには見せていないシートでもいいのですが)、その一定のレンジを、ポップアップシェイプの母体として定義し、そのレンジを図としてコピーし、シートに貼り付ける、という手法を取ります。
コメント