皆さんは、ユーザーフォームというものをご存知でしょうか?
ユーザーフォームというのは、Excel VBAの中でユーザーが自由にデザインして作成できる入力フォームのことです。
ユーザーフォームを使うことで、セルに直接入力したりVBAで自動入力したりするだけでなく、フォーム上からデータを入力することもできるようになります。
今回は、ユーザーフォームの詳しい使い方について、じっくりと解説していきたいと思います!
VBAのユーザーフォームとは?
ユーザーフォームとは、コントロールと呼ばれるパーツを自由に配置して作成し、オリジナルの入力フォームを表示・利用することのできる機能です。
入力フォームを使用して回答方法を一律にすることで、セルに入力する値を固定したり、意図せぬ上書きを防止したりするための方法としても活用することができます。
ユーザーフォームの使い方
ユーザーフォームを使用するにあたって、コードの記述以外にも行わなければいけない作業がいくつかあります。
ユーザーフォームを挿入する
まずは、ユーザーフォームを使用するための事前準備として、ユーザーフォームを挿入する必要があります。
最初に上部メニューの「挿入」→「ユーザー フォーム」を選択します。
または、左ウインドウのプロジェクト内を右クリックし、「挿入」→「ユーザー フォーム」でも挿入できます。
選択が完了すると、以下のようにユーザーフォームとツールボックスが表示されます。
この状態で、以下のようにコードを記述して実行すると、画面に作成したユーザーフォームが表示されます。
【サンプルコード】
Sub sample()
UserForm1.Show
End Sub
【実行結果】
挿入直後は上のように何もない状態ですが、各コントロールを配置するとフォーム内にパーツが表示されるようになります。
コードエディタの表示に切り替える
各コントロールを操作した際の動作については、コードを記述して処理内容を指定します。
プロジェクトエクスプローラ部分にある「コードの表示」をクリックすると、ユーザーフォーム用のコード入力画面が表示されます。
↓
ユーザーフォームを閉じる
表示されたユーザーフォームを閉じるには、フォーム右上の×ボタンを押すか、コマンドボタンを設置して押した際に閉じるよう処理するのが一般的です。
コマンドボタンは、以下のように「ツールボックス」のコントロール一覧から「コマンドボタン」をドラッグ&ドロップして貼り付けます。
貼り付けたボタンをダブルクリックするか、右クリックして「コードの表示」を選択すると、自動でイベントプロシージャが生成されます。
このプロシージャ内に、ボタンを押した際の処理を記述していきます。
ユーザーフォームを閉じるには、Unloadステートメントを使用します。基本構文は以下のとおりです。
【サンプルコード】
Private Sub CommandButton1_Click()
Unload ユーザーフォーム名(もしくはMe)
End Sub
ステートメントの引数には、閉じるユーザーフォームの名前を指定します。操作中のフォームをそのまま閉じる場合は、名前の代わりに「Me」と指定することもできます。
また、コマンドボタンの表示テキストを変更したい場合は、ボタンを選択後にもう一度クリックし直接変更するか、「プロパティ」部分の「Caption」を変更すると反映されます。
テキストボックスの使い方・作り方
次は、テキストボックスの使い方について見ていきましょう。
先ほどと同じように、「ツールボックス」内から「テキストボックス」を選択してフォームに貼り付けます。
テキストボックスをフォームに表示させることで、ボックス内に入力した文字をセルに反映させるなどの処理ができるようになります。
入力したテキストをシートに反映させる
まずは使い方の一例として、入力したテキストをシート上のセルに反映させてみます。
今回は、コマンドボタンを押した際に内容が表示されるよう処理していきます。フォーム内にテキストボックスとコマンドボタンを配置し、コマンドボタン側のプロシージャに以下のようにコードを記述します。
【サンプルコード】
Private Sub CommandButton1_Click()
Range("A1").Value = TextBox1.Text
End Sub
実行ボタンを押すと、配置した内容でユーザーフォームが表示されます。
テキストボックスに文字を入力してコマンドボタンを押すと、指定したセルに入力内容が反映されます。
【実行結果】
ボックス内にテキストを表示する
次は反対に、指定セル内のテキストを読み込んでテキストボックスに表示する方法を解説します。
今回は、ユーザーフォームの起動時にテキストを反映させる例を紹介していきたいと思います。
フォーム起動時の処理を定義したい場合は、「UserForm_Initialize」というプロシージャを実装し、その中に記述します。プロシージャの作成はコードウィンドウから実行することもできます。
リストの中から対象のオブジェクトとイベントを選択すると、対応するプロシージャが作成されます。
自動で生成されるプロシージャとは別のイベント処理を追加したい場合にも応用できます。
プロシージャの作成後、以下のようにコードを記述すると、起動時にセルの内容が反映されるようになります。
【サンプルコード】
Private Sub UserForm_Initialize()
TextBox1.Text = Range("A1").Text
End Sub
【実行結果】
コンボボックスを作成する
次は、コンボボックスの使い方について見ていきましょう。
コンボボックスは、複数の選択肢の中から1つの回答を選ばせる場合に使用するコントロールです。「ツールボックス」から「コンボボックス」を選択して、ドラッグ&ドロップすることで追加できます。
選択肢をあらかじめ用意しておきたい場合は、「UserForm_Initialize」プロシージャ内にコードを記述します。AddItemメソッドで選択肢を追加することができます。
【サンプルコード】
Private Sub UserForm_Initialize()
With ComboBox1
.AddItem "りんご"
.AddItem "ぶどう"
.AddItem "みかん"
End With
End Sub
【実行結果】
コンボボックスではテキストを直接入力することもできますが、入力を拒否してリストからのみ選ばせたい場合には、以下のようにコードを記述することで設定の変更が可能です。
【サンプルコード】
Private Sub UserForm_Initialize()
ComboBox1.Style = fmStyleDropDownList
End Sub
リストボックスを作成する
続いては、リストボックスの使い方について説明していきます。
このコントロールは、コンボボックスと同じく複数の選択肢から回答を選ばせるものですが、テキストの直接入力ができない代わりに、回答を複数選択できる特徴があります。
デフォルトの設定は単一選択となっているので、複数選択を可能にしたい場合は以下のように記述します。
【サンプルコード】
Private Sub UserForm_Initialize()
ListBox1.MultiSelect = fmMultiSelectMulti
End Sub
ツールの追加方法と、選択肢をあらかじめ用意しておく方法については、コンボボックスの時と同様となります。
【追加方法】
【サンプルコード】
Private Sub UserForm_Initialize()
With ListBox1
.AddItem "りんご"
.AddItem "ぶどう"
.AddItem "みかん"
End With
End Sub
【実行結果】
チェックボックスを追加する
最後に、チェックボックスの使い方について見ていきましょう。
まずは、「ツールボックス」から「チェックボックス」を選択してドラッグ&ドロップします。
項目を複数用意したい場合は、必要数分だけチェックボックスを配置してください。項目名の変更は、コマンドボタンの時と同様にコントロールを選択して直接入力するか、Captionに入力します。
チェックボックスのValueはTrue(チェック済み)かFalse(未チェック)のみです。
フォーム起動時の初期値を変えたい場合は、以下のように記述します。
【サンプルコード】
Private Sub UserForm_Initialize()
CheckBox1.Value = True
End Sub
【実行結果】
まとめ
いかがでしたでしょうか?
今回紹介したもの以外にも、様々な機能がユーザーフォームには実装されています。
分からないことがあればこの記事を参考にしつつ、ぜひ色々と試してみてくださいね!
関連記事
- VBAとは
- Excelで覚えておくべき17の基本関数と目的別逆引き一覧
- オートフィルターの設定・解除方法
- メッセージボックスの設定方法
- セルの値を取得・上書きするValueプロパティの使い方を解説
- 【Excel VBA】Functionの使い方を解説(宣言・引数、戻り値の指定、応用法)
- 【VBA入門】配列まとめ(宣言・初期化、反復処理、コピー、結合)
VBAの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。