適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話など気になったことも載せているブログです。

Excel VBAで使われるユーザーインターフェース8選

プログラムのユーザーインターフェースは極力シンプルであれ!!

ユーザー向けにVBAでプログラムを作っていると、プログラムの実行方法をどうすべきかで迷うことがあります。

簡単なプログラムだから、リボンにある、マクロの実行ボタンから実行してもらおうか。ショートカットキーを割り当てておこうか。ユーザーフォームを作り込むか。コマンドボタンをシート上に配置するか。リボンにボタンを配置するか・・・。

ざっと考え付くだけでも色々な実行方法がありますね。

私の持論は、「ユーザーインターフェースは極力シンプルに。」です。

アプリケーションにもよりますが、作る側としては、なるべく簡単に済ませたいと思うのです。

誤解してほしくないのは、ここでいう「簡単」というのは、手を抜くということではありません(そういう側面があることも否定しませんが・・・。)。

作りが簡単ということは、後々の「保守コストを抑える」ことができる、ということもつながります。

また、見た目も簡単かつ、シンプルに保つことがユーザーのためにもなります。

なるべく楽に、簡単に、シンプルに・・・。インターフェースは極力そうあってほしいと考えています。

しかし、シンプルに保つといっても、アプリケーションによって、どのようなインターフェースを採用するかを悩むことがある?かと思います(私はよく悩むんです)。

今回は、どんなケースでどんなユーザーインターフェースを使ったらいいか、私の持論を書いてみたいと思います。

どんなユーザーインターフェースがあるか

まず、考えうるユーザーインターフェースとしてどんなものがあるか、挙げてみましょう。 * VBEの再生ボタンで実行 * リボンにあるマクロの実行ボタン * ショートカットキーを割り当てる * コマンドボタン * ユーザーフォーム * リボンにオリジナルボタンを配置 * イベントからキック * 外部のスクリプトから起動

私の知っている手法を挙げてみました。

インターフェースというか、マクロの実行方法ですね。

それを含めてここでは、ユーザーインターフェースとさせていただきます。

VBEの再生ボタンで実行

f:id:shinmai_papa:20191121140230p:plain

VBEの再生ボタンは、上のボタンですね。

ユーザーに「これで、自分の好きなプログラムを実行してね~」と言えたらどんなに楽か・・・。

しかしそれは絶対無理な話ですね。作った本人であれば、それでもいいですが、それは、プログラムの内部、作りをよく知っているからできるわけで・・・。

何もわからないユーザーにここから実行させることは、やめた方がよさそうです。

<結論>☆☆☆☆☆

リボンにあるマクロ実行ボタン

f:id:shinmai_papa:20191121140235p:plain

表示タブのマクロボタンをクリックすると出てくる、マクロ一覧から実行する方法です。

マクロの数は一つか二つくらいだと、これでも十分ですね。

作り手は、マクロのアクセス修飾子(Public、Privateなど)だけ気にしていれば一覧に出てくるマクロを制御することができます。

しかしプログラムの数が多くなってくると、ユーザーは不便かも知れません。

また、マクロに保護をかけていない状態だと、編集ボタンからユーザーが簡単にソースにアクセスできてしまいます。

それによって、予期せずコードを書き換えられてしまうというリスクもあります。

少人数や、リテラシーのある人だけで使う分には十分選択肢の一つになると思います。

<おすすめ度>★☆☆☆☆

ショートカットキーを割り当てる

f:id:shinmai_papa:20191121140239p:plain

上述の表示タブのマクロボタンのオプションをクリックすると出てくる、マクロオプション。

Ctrlキーと何かのキーの組み合わせで登録することができます。

ショートカットキーの存在がしっかり周知されていれば、有力な選択肢です。

作り手はショートカットキーを登録するだけでいいですし、ユーザーはどのショートカットキーがどのプログラムと結びついているかを知っていればいいだけです。

実行するプログラムの数が、一つや二つ程度であれば、こちらも十分に選択肢の一つになり得ます。

デメリットとして、プログラムの数が多くなると必然的に割り当てるショートカットキーも多くなりますので、覚えるのが大変だったり、既存のExcelのショートカットキーと重複する可能性が出てきます。

また、この手法だと、マクロがあることが表に出てきません。

私が実際に見た例として、作られて時間が経過したExcelブックで、そもそもマクロがあること自体が忘れ去られていた、ということがありました。

<おすすめ度>★★☆☆☆

コマンドボタン

f:id:shinmai_papa:20191121140241p:plain

こんな感じのコマンドボタンをワークシート上に設置して、そこにマクロを割り当てる手法です。

別にコマンドボタンに限らず、オートシェイプなどにもマクロを割り当てることができます。

でもユーザーが一目見て、「なんか押したらプログラム起動しそうだな!!」と思える見た目のものに割り当てる方が得策だと思います。

昔作られたブックで、変なオートシェイプにマクロが割り当てられてたことがあり、長年気づかれずに掘っておかれてた例を見てきたので・・・。

メリットとして、ユーザーが一目でマクロがあるな、とわかる点が挙げられます。

また、他のコントロールを組み合わせることで、ワークシートを一つのメニュー画面のようにに仕立てることができます。

この手法は、一つのプログラムだけでなく、複数のプログラムを使うアプリケーションまで幅広く活躍してくれると思います。

デメリットとして、ワークシートのどこかに必ず配置する必要がある、という点があります。

どういうことかと言うと、ワークシートをメニューに見立てているならそのワークシートを、データの上部など特定の場所を設けてそこに配置しているなら、その範囲を陣取っているわけです。

常に見える形で常に居座っているわけですね。その辺もマクロで制御できるわけですが、プログラムで全てのワークシートを走査する際(For eachなど)は、邪魔なんです。

また、データの上部にあると、必然的にそこにデータは入れることができません。邪魔なときがあるんです。

総じて、柔軟性が高く、作り込みも、そこまで必要がないので、ポイント高しです。

<おすすめ度>★★★★★

ユーザーフォーム

f:id:shinmai_papa:20191121140244p:plain

ユーザーフォームという名前らもわかるように、ユーザーインターフェースのためのオブジェクトですね。

これを駆使すれば、色々なものができます。

アプリケーションによっては、これがすべてという場合もあるくらい。

ちゃんと作り込むと、本当にExcel??というようなインターフェースができあがること請け合いです。

ただし、作り込みは大変です。

私が思うに、ユーザーフォームまでしっかり作り込むような場合は、もはや、Excel VBAで作るべき範疇を超えているのでは・・・というのが私の持論です。

冒頭にもあるように、ユーザーインターフェースは極力シンプルに!!なので。

<おすすめ度>★★★☆☆

リボンにオリジナルボタンを配置

ちょっとマニアックな手法に分類されるかも知れませんが、Excelのリボンにオリジナルのボタンを配置する、というものがあります。

詳しくはこちらのサイト様が参考になります。

Office 2007/2010・リボンのカスタマイズ 初心者備忘録

この手法のメリットは、ワークシートにボタンがあるわけではないので、全体として、すっきりするということが挙げられます。

また、慣れてしまえば、メンテナンスも簡単なので、私個人的にはおすすめの手法です。

ワークシート上にボタンは配置したくない・・・。でもユーザーフォームを作り込むまでもない・・・といったときに重宝します。

デメリットとしては、慣れるまでが大変ということです。

また、マニアックなので情報が少ない点が挙げられます。

<おすすめ度>★★★★☆

イベントからキック

ここからはちょっと番外編っぽいですが・・・。

これはちょっと毛色が違いますが、一応取り上げました。

ワークシートの変更や、ブックを開くなどのイベントに応じてプログラムを実行する手法です。

この最大のメリットは、実行については、ユーザーが意識することがないという点です。

デメリットは、使える場面が限られるということでしょうか。

<おすすめ度>★★★☆☆

外部のスクリプトから起動

例えばPowerShellのような、スクリプト等からVBAを呼び出して実行する手法です。

これまたマニアックですが、一応、ひとつの方法であろうということで挙げておきます。

参考サイト様

https://codeday.me/jp/qa/20190405/553751.html

<おすすめ度>★★☆☆☆

終わりに

以上、Excel VBAのユーザーインターフェースについて、見てきました。

どんな形が最良なのかは、本当に求められるアプリケーションによって変わってくるかと思います。

作り手として大事なことは、どんな手法をとることができ、それぞれの得手不得手を理解して、上手に提案できることに尽きると思います。

もちろん、作り手の負荷や、将来的な保守コストも見越しつつ、ユーザーが本当に必要としているものを作れる作り手になりたいものですね。

ここまでお読みいただき、ありがとうございました。