
ユーザーフォームでオリジナル入力画面を作る

エクセルのデータ入力・検索・修正作業ってとても面倒で時間と手間がかかりませんか?
この作業を簡単に素早く終わらせたくないですか?
エクセル使うなら今話題の時短や作業効率化したいと思って、何か情報求めていますよね。
エクセルの標準機能”VBA”?プログラミング?単語を聞いただけであきらめないでください。
私自身もエクセル関数ですら分からないレベルだったのに、コツコツ本とにらめっこしながら取り組んだら、顧客管理で使用する住所録の入力フォームができるようになりましたので皆さんもぜひ挑戦して作業効率化してくださいね。

さらにコロナ禍で休日は自宅に巣ごもりせざるを得ないので、VBA関数を組み合わせて、オリジナルカレンダーも作る事もできますよ。

ユーザーフォームとは?
Excel VBAで自分自身のオリジナル入力画面(ダイアログボックス)を自由にデザインして、文字や入力枠、実行ボタンなど様々なパーツを配置してエクセルワークシート上に表示して利用できるVBA機能のことです。
このユーザーフォームには、プログラムした内容を実行する「コマンドボタン」や入力されたセルの文字を読み込んで表示させる「ラベル」、文字の入力用の枠「テキストボックス」、特定のリストの中から選んでもらえる「リストボックス」などが自由に配置できるので覚えるととても便利になりますので、VBAを使うならば必須アイテムです。
ユーザーフォームを使う事により、基本的にワークシート自体を触らずに目的のセルに文字や数字などを入力できるので、作成者以外の人(職場などで他の人)が使う場合などでは、作成者が意図しない操作をされてしまい、せっかく作ったエクセル関数やVBAプログラムが機能しなくなってしまうトラブルを回避できます。
そして何と言っても自動的に作業を行ってくれるようになるので、探す手間が無くなり作業効率が大幅にアップします。
このページでは商品入力フォームの作成をしながら、ユーザーフォームやテキストボックスの簡単な使い方をご紹介します。
ユーザーフォームの作成
エクセルのユーザーフォームを作成するには、Visual Basic Editor(VBE)を開きますが方法は3つあります。
- [Alt]+[F11]キーを押して、Visual Basic Editor(VBE)を起動する
- シート名にカーソルを合わせて”右クリック”➡”コードの表示”を選択する
- 開発からVisual Basic Editor(VBE)を起動する
1と2はすぐにできますが、3についてはOfficeの設定が必要です。
開発の表示設定方法
エクセルワークシートの左上のOfficeボタンをクリックしてからExcelのオプションをクリック。 (Office2016は「ファイル」)
➡左下の「オプション」へ)
Excelのオプションが開きますので、リボンのユーザー設定から「開発タブをリボンに表示する」にチェックを入れるだけです 。
リボンツールバーに開発が追加されました。
開発が追加できたら開発をクリックしてVisual Basicをクリックすると、Visual Basic Editor(VBE)が起動します。
ユーザーフォームを作成(抽入)する
Visual Basic Editor(VBE)を起動すると下記のような画面が表示されたら、【挿入】をクリックします。
次に【ユーザーフォーム】をクリックするとユーザーフォームが表示されます。
当たり前ですが、まだ何の機能もないただのユーザーフォームですが、とりあえず配置することができました。
ユーザーフォームを挿入したら、好みの名前や書式に変更するプロパティウィンドウの設定をしましょう。
それでは「UserForm1」の名前などを変更しますので、【表示】をクリックして次に【プロパティウィンドウ】をクリックすると、「UserForm1」のプロパティが表示されます。
プロパティウィンドウ
プロパティウィンドウとは、作成したユーザーフォームやフォーム上に作成したコマンドボタンなどの書式などのプロパティを設定できるようになっています。

作成したUserForm1の名前を変えて用途に合った名前にしましょう。
左の画像は、UserForm1のプロパティウィンドウで、左側が名称で右側が値になっています。
今回変更するのは名称ですが、見ての通りその他たくさんの項目があり変更できることがたくさんあります。
それでは名称を変更してみましょう。
変更方法はCaptionを「UserForm1」から「商品登録」にすると名称が変わりました。

せっかくなので、作成したユーザーフォームをエクセルのワークシート上で動かしてみましょう。
操作方法は、Visual Basic Editor(VBE)画面の▶ボタンを押してみましょう。
当然ながら、まだ何も設定していないので、ワークシート上に商品登録のフォームが表示されるだけで、表示されたユーザーフォームの右上の×印をクリックで元の画面に戻ります。
いかがですか?動いてくれましたか?
ちなみに、ユーザーフォームの大きさを変える方法は、通常の画像と同じように左クリックしながら引っ張れば、大きさを変えられます。
もちろん、プロパティからも変更可能ですが、直感的に操作できるのは、先に書いた通りです。
それでは、次に商品登録ができるように、ツールボックスを使ってユーザーフォームにパーツを配置しましょう。

ユーザーフォームを使いこなすと住所録だって簡単にできちゃいます。

UserFormのツールボックスを使う
ツールボックスとは、作成したユーザーフォームにコントロールという部品セットみたいなものです。

このコントロールには、文字や数字を入れる「テキストボックス」やユーザーフォームに文字列を表示する「ラベル」など使う目的に応じて種類があります。
コントロール名 | 機能 |
---|---|
ラベル | 文字列の表示 |
テキストボックス | 文字列の入力 |
コンボボックス | 一覧から選択して文字列の入力 |
リストボックス | 一覧から項目選択 |
チェックボックス | 複数の項目から複数の項目を選択 |
オプションボタン | 複数の項目から1つの項目を選択 |
トグルボタン | オン・オフの切替 |
フレーム | コントロールのグループ化 |
コマンドボタン | ボタンクリックによるコマンド実行 |
タブストリップ | タブによりページ切替(同一コントロール) |
マルチページ | タブによりページ切替(ページ別複数コントロール) |
スクロールバー | スクロール操作で値の増減 |
スピンボタン | ボタンのクリック操作で値の増減 |
イメージ | 画像の表示 |
RefEdit | セルの範囲選択 |
カレンダー | カレンダー |

無くなってしまったならば、作ってしまおう!

では、先ほど作成した商品登録(UserForm1)に商品名を入力する枠を作りますが、この文字や数字を入力する枠の事を「テキストボックス」といいます。

ツールボックスのテキストボックスにマウスのカーソルを合わせると”テキストボックス”とコメントが表示されますので、クリックしてUserForm1の中に好きな大きさにドラッグ&ドロップするだけです。
レイアウトは後回しで、大きさや位置など気にせずに3つ作りましょう。
テキストボックスは作成した順番にTextBox1、2、3となり、次にこのテキストボックスに文字を入れた時に、エクセルシートの任意のセルに入力する為に実行させるボタンを作ります。
このボタンの事をコマンドボタン(CommandButton)といいます。
コマンドボタンの作成もテキストボックス作成時と同様の方法で、ツールボックスからコマンドボタンを選ぶだけです。
これで、TextBox1、2、3に入力した文字や数字がCommandButton1を押すことによって、エクセルシートの任意のセルに入力するというユーザーフォームの最初の1歩ができましたが、まだ完成したわけではありません。まだ、何も指示命令(コード)を設定していないからです。
実際に前述した、Visual Basic Editor(VBE)画面のボタンを押して、エクセルシートに表示された商品登録(UserForm1)のTextBox1、2、3に文字を入れて、CommandButton1を押してみても何も変化はないですね。(ボタンが押せたぐらいです)
コマンドボタンにVBAコードを書き込む
TextBox1、2、3に入力した文字や数字を指定したシートのセルに記述する(転記)コードを書いてみます。
転記するシートは、Sheet1。セルはA1とすると、下記のようになります。
Private Sub CommandButton1_Click()
Worksheets(“sheet1”).Range(“A1”).Value = TextBox1.Value
Worksheets(“sheet1”).Range(“B1”).Value = TextBox2.Value
Worksheets(“sheet1”).Range(“C1”).Value = TextBox3.Value
End Sub
- コマンドボタン1が押されたら
- シート名(sheet1)のセルA1の値はテキストボックス1の値にする
- シート名(sheet1)のセルB1の値はテキストボックス2の値にする
- シート名(sheet1)のセルC1の値はテキストボックス3の値にする
- マクロ終了
これで、TextBox1に入力された文字や数字はSheet1のセルA1に、TextBox2に入力された文字や数字はSheet1のセルB1に、TextBox3に入力された文字や数字はSheet1のセルC1に、必ず転記されます。
では、Visual Basic Editor(VBE)画面のボタンを押して、エクセルシートに表示された商品登録(UserForm1)のTextBox1、2、3に文字を入れて、CommandButton1を押すと、ワークシートにユーザーフォームを使って入力した文字や数字が、転記されましたね。

この方法でユーザーフォームを使ってセルの入力ができましたが、この方法だと何度入力しても同じセルに上書きされるだけなので実用性はありません。
そこで、コマンドボタンを押して入力が終わると、次の行に自動的に入力されてリストが作れるようにコードを追加すればできるようになります。

でもその前に、ユーザーフォームの見た目を無視して作ったので体裁が悪いので、テキストボックスを揃えたりコマンドボタンの名前を変えたりと体裁を整えましょう。
コントロールの大きさや位置など体裁を整える
3つ作ったテキストボックスの大きさを揃える方法は、コントロールを複数まとめて選んでVisual Basic Editor(VBE)画面の「書式」➡「同じサイズに揃える」を選びます。
表示された「幅」「高さ」「両方向」の中から揃えたい大きさの項目を選べば、バラバラだったテキストボックスの大きさ・位置が綺麗に揃います。
1、複数のテキストボックスを選ぶ

2、大きさをそろえる

3、配置場所をそろえる

4、完成

このように基本的に書式により体裁を整えることができますが、どうやっても大きさや位置が揃わない時は、プロパティでポイント単位で直接入力して修正が可能です。

コマンドボタンの名前を変更する
「CommandButton1」の名前を変える方法は簡単です。
Visual Basic Editor(VBE)画面左下にコントロールのプロパティがありますので、ここで変更します。

ユーザーフォームの中の「CommandButton1」をクリックすると、コントロールのプロパティが「UserForm1」から「CommandButton1」のプロパティに変わります。
正直英語でずらずら並んでいるので分かりずらいですが、アルファベット順にAから順番に上から並んでいます。
ここでは、「CommandButton1」を押すと商品名が登録できるようにユーザーフォームを作っているので、コマンドボタンの名前は「登録」が合っていますので、「CommandButton1」という表示を「登録に変更する設定をします。
「CommandButton1」のプロパティの(オブジェクト名)の行の6行目に「Caption」があり、右側に「CommandButton1」となっています。
ここの「CommandButton1」と書いてある文字を削除して「登録」に書き換えると、コマンドボタンの名前が変わります。

次はテキストボックスがユーザーフォーム上に並んでいるだけなので、テキストボックスのところに何の事柄を入れるのかわからないのでタイトルや見出しをつけましょう。
ユーザーフォームのラベルを配置する方法
ユーザーフォームのラベル(Label)とは、フォーム上に文字列を表示する為のコントロール(部品)です。
ラベルには直接文字入力などをするものではありませんが、フォーム上のお題(タイトル)や他のコントロールの説明書きなどに利用することが多いです。
先ほどのテキストボックスやコマンドボックスを作成した時と同じ方法で、ツールボックスからラベルを選びます。

配置方法は以下の通りです。
- ラベルを配置したいユーザーフォームを選ぶ
- ユーザーフォームをクリック
- ツールボックスが表示される
- ツールボックスからラベルをクリック
- マウスのポインターの表示が変わる
- ユーザーフォーム内のラベルを配置したい場所をクリック
これでユーザーフォーム上にラベルが配置されました。

再びユーザーフォームをエクセルのワークシート上で動かしてみましょう。
先ほどと同じく、Visual Basic Editor(VBE)画面の▶ボタンを押してみましょう。
見栄えも良くなり、ほんの少しだけエクセルが上達した気がしませんか?
ユーザーフォームを追加作成したり、文字入力のテキストボックス・実行ボタンでもあるコマンドボタン・名前表示などのラベルをどんどん増やして使いこなしていけば、オリジナルフォームはどんどんバージョンアップできます。
あえて言えばついでに見栄えの為のフレームぐらいかな。
その他のパーツはたまにしか使っていませんので、正直無くても何とかなるレベルですし、コロナ禍の今こそステイホームで外出しにくい状況なので、毎日少しずつエクセル触れば必ずさらに上達できますよ。
ユーザーフォームを動かしてみよう
先ほどまでは、Visual Basic Editor(VBE)画面の▶ボタンを押して動作確認をしていましたが、実際にはこのような方法では使わず、下記の方法でユーザーフォームをエクセルワークシート上で表示させます。
- エクセルファイルを開いたら自動的にユーザーフォームが表示される
- ワークシート上にコマンドボタンを配置してクリックしたら表示させる
実際どちらも個人的に使用しているユーザーフォーム表示方法なので、それぞれご紹介します。
エクセルファイルを開くとフォームが自動表示する
この方法ならば自分以外の誰が使おうと、必ず表示されるユーザーフォームから操作するようになりますので、役割としてはメニュー画面です。
このページの一番最初の画像が住所録の入力フォームで最初に表示されるので、全てがここから始まるようになっています。
この方法もVMicrosoft Visual VasicのVBA Projectの中にある、ThisWorkBookに記述すればすぐにできます。
ワークシート上にコマンドボタンを配置する
エクセルファイルを開いたら自動的に表示するようにしているので必要ないのですが、予備として配置しています。
しかしながら、このボタン見えたら見栄えが悪いので自動的に表示されたフォームの後ろに隠れる場所に配置しています。
1,2,とも記述するVBAコードはおぼ同じですが、記述する場所が違うだけなので難しくはありません。
ユーザーフォームを開くだけでも様々なパターンがあるので、詳しくは下記をご覧くださいませ。

