VBA
業務改善
「項目を1つ追加したい」だけなのに?Excel VBAのUserFormで変更が難しくなる理由
ぴーす君
Excel VBAでシステムを作っていると、完成後にこんな依頼を受けることがあります。
「この画面に、役職の項目を追加してください」
「1項目追加するだけなら、そんなに難しくないのでは?」
と思われるかもしれません。
実際、項目を1つ追加すること自体が、特別難しいわけではありません。
しかし、UserFormの場合は、その後も「使いやすい画面」を維持しようとすると、意外と考えることが増えてきます。
今回は、Excel VBAのUserFormで項目を追加するとき、なぜ変更が簡単ではないのかについて紹介します。

UserFormは「限られた範囲」の中でレイアウトする
UserFormには、Excelのワークシートのように、好きなだけ行や列を追加できるわけではありません。
決められた大きさの画面の中に、
ラベル
TextBox
ComboBox
ListBox
CommandButton
などのコントロールを配置していきます。
そのため、項目を1つ追加するときには、
「どこに置くか?」
を考える必要があります。
例えば「役職」を「部署」と「生年月日」の間に追加するのであれば、生年月日以降の項目を下へ移動する必要があります。
UserFormでは、基本的にそれぞれのコントロールを配置した位置を調整していくため、途中に項目を追加したからといって、その下にある項目が自動的にすべて移動してくれるわけではありません。
そのため、1つの項目を追加したことで、その周辺のレイアウトにも変更が発生します。

「空いている場所があるから置ける」とは限らない
では、空いている場所に新しい項目を置けばいいのでしょうか。
これも、そう簡単にはいきません。
UserFormを見て、
「ここに少し空きがあるから、ここに追加できそう」
と思っても、実際にLabelやTextBox、ComboBoxなどを配置すると、幅が足りないことがあります。
例えば、
ラベルを置く幅が足りない
入力欄を十分な長さにできない
他の項目との間隔が狭くなる
文字が長いと収まらない
既存の項目と位置が揃わない
といったことがあります。
つまり、
画面上に空きスペースがあることと、新しい項目を使いやすく配置できることは別です。
UserFormでは、限られた画面の中で「実際に使えるスペース」を考える必要があります。
項目が増えると「情報の整理」も必要になる
1項目程度なら、配置を調整するだけで済むかもしれません。
しかし、追加する項目が複数になると話が変わります。
例えば、
役職
所属
内線番号
勤務区分
メールアドレス
などが次々と追加されたとします。
単純に上から順番に並べていくと、画面の中に情報が詰め込まれていきます。
すると、
「この項目とこの項目は何の関係があるのか?」
が分かりにくくなることがあります。
その場合には、単純に項目を追加するだけではなく、
関連する項目をまとめる
Frameでグループ化する
区切り線を入れる
見出しを追加する
項目の並び順を見直す
といった工夫が必要になります。
項目を増やした結果、情報量が多くなればなるほど、「何をどこに置くか」だけでなく、「どう整理して見せるか」まで考える必要があるのです。

UserFormでは「追加」より「使いやすさを維持する」ことが難しい
ここまで見てきたように、UserFormに項目を追加すること自体は、決して難しい作業ではありません。
難しいのは、項目を追加したあとも、利用者にとって使いやすい画面を維持することです。
例えば、項目を追加したことで、
入力欄が狭くなった
項目同士の間隔が不自然になった
関連する項目が離れてしまった
画面に情報が詰まりすぎた
どこに何を入力するのか分かりにくくなった
となってしまえば、項目を追加する前より使いにくい画面になってしまいます。
そのためUserFormの変更では、
「追加できるか?」ではなく、「追加したあとも使いやすいか?」
という視点が重要になります。
そして、この問題は項目を追加する回数が増えるほど大きくなります。
Excelのメリットである「すぐ変更できる」は、UserFormにはそのまま当てはまらない
Excelでシステムを開発するメリットの一つに、業務の変化を比較的すぐに反映できることがあります。
例えばExcelシートであれば、
項目を追加する
列を増やす
表示する内容を変更する
計算式を変更する
といった変更を、比較的柔軟に行うことができます。
しかし、UserFormを使った画面では事情が違います。
「この項目も追加したい」となった場合、単純に入力欄を1つ増やせば終わり、とは限りません。
既存の項目を移動したり、入力欄の幅を調整したり、情報をグループ分けしたりと、画面全体を見直す必要が出てくることがあります。
つまり、
「Excelだから後からすぐ変更できる」というメリットは、UserFormを使った画面にはそのまま当てはまりません。
UserFormを使うことで、利用者にとって分かりやすい専用画面を作ることができます。
その一方で、Excelシートを直接変更するような手軽さは失われやすくなります。
だからこそ、開発の早い段階で項目を確認する
UserFormを使うのであれば、開発の早い段階で、
「この画面には何が必要なのか?」
をできるだけ具体的に確認しておくことが重要です。
例えば、
本当に入力が必要な項目なのか
別の項目とまとめられないか
誰が何を入力するのか
項目同士にどのような関係があるのか
今後追加される可能性がある項目はないか
といったことを確認します。
もちろん、開発後に新しい要望が出てくることはあります。
しかしUserFormの場合、
「必要になったら、後から追加すればいい」
と簡単には考えにくいということを、開発する側も依頼する側も知っておいた方がよいでしょう。
後から追加することが難しいのであれば、最初の段階で必要な項目をしっかり吟味する。
これはUserFormを使ったシステムを作るうえで、大切な考え方です。
「変更が多い業務なのか?」も考えてみる
もう一つ考えておきたいのが、その業務が今後どのくらい変わるのかということです。
例えば、
「今後も入力項目が増える可能性が高い」
「業務のルールが頻繁に変わる」
「運用しながら画面を何度も変更する可能性がある」
という業務であれば、UserFormを作る前に、その変更についても考えておいた方がよいでしょう。
Excelシートのように、業務の変化をすぐ反映できることを重視するのであれば、UserFormをどこまで使うのかを検討する必要があります。
一方で、
「入力する項目がある程度決まっている」
「業務の流れが大きく変わることは少ない」
「決められた手順で入力してもらいたい」
という業務であれば、UserFormの特性を活かしやすくなります。
もちろん、将来の業務を完全に予測することはできません。
だからこそ、
「この業務は、今後も変化していく業務なのか?」
という視点を、UserFormを採用する前に持っておくことが重要です。
まとめ
UserFormに項目を1つ追加すること自体は、難しい作業ではありません。
しかし、項目を追加すると、
既存項目の位置を調整する
入力欄の幅や間隔を調整する
情報をグループ化する
Frameや区切り線を追加する
項目の並び順を見直す
などが必要になることがあります。
つまりUserFormでは、
「項目を追加できるか」ではなく、「追加したあとも使いやすい画面を維持できるか」
が重要になります。
Excelでシステムを開発するメリットの一つは、業務の変化を比較的すぐに反映できることです。
しかし、UserFormを使った画面では、そのメリットをそのまま活かせるとは限りません。
だからこそ、UserFormを採用する場合は、開発の早い段階で必要な項目をしっかり確認することが大切です。
そして、
「この業務は今後どのくらい変わるのか?」
ということも、UserFormを使うかどうかを考える材料になります。
UserFormは、現在の使いやすさだけを見るのではなく、将来の変更のしやすさまで含めて、どこまで使うのかを考える。
それが、長く使うExcel VBAシステムを設計するときの一つのポイントになります。