【VBA入門】ユーザーフォームの使い方(テキスト表示、カレンダー)

ユーザーフォームって使っていますか?

ユーザーフォームとは、入力フォームを自由にデザインして作成し、表示利用できるVBAの機能のことです。テキストボックスやコンボボックス、リストボックスやチェックボックスなどをフォーム上に配置して表示利用します。

この記事では、ユーザーフォームを使う方法について

  • ユーザーフォームを呼び出して使う方法
  • ユーザーフォームを閉じる方法
  • テキストボックスの使い方
  • リストボックスの使い方
  • カレンダーの使い方
  • コンボボックスの使い方
  • チェックボックスの使い方

など基本的な内容から、実用的な内容についても解説していきます。

今回はユーザーフォームの使い方について、わかりやすく解説します!

目次

ユーザーフォームの使い方

まずはユーザーフォームを使う準備をしましょう。

呼び出して表示する方法

ユーザーフォームを呼び出して表示する方法について説明します。

プロジェクトエクスプローラでプロジェクトを右クリックして、「挿入」→「ユーザーフォーム」を選択すると「ユーザーフォーム」が呼び出されます。

userform01

以下のように、ユーザーフォームとツールボックスが表示されます。

userform02

コードのエディタに切り替える方法

閉じてコードを記述するには、プロジェクトエクスプローラの「コードの表示」をクリックします。

userform03

フォームを閉じる方法

フォームを閉じるには、フォームの右上の「×」ボタンを押すか、「コマンドボタン」を押したときに閉じるように処理を記述する必要があります。

以下のように記述します。

Private Sub CommandButton1_Click()
    Unload UserForm1
End Sub

テキストボックスの使い方

テキストボックスの使い方についてみていきましょう。

テキストボックスは、「ツールボックス」から貼り付けます。「ツールボックス」からテキストボックスのアイコンを選択して、フォーム上の位置までドラッグ&ドロップして貼り付けます。

userform04

フォームからドラッグ&ドロップした後

userform05

「コードを表示」をクリックするとSubプロシージャが自動で生成されています。

userform06

テキストを入力する方法

テキストボックス内に入力したテキストをボタンを押してExcelのシートに転記するようにしましょう。ボタンは「ツールボックス」から「コマンドボタン」をフォームへドラッグ&ドロップします。

userform07

userform08

「コマンドボタン」をクリックした際の処理を記述しましょう。「コード表示」でコードエディタを確認すると、Subプロシージャ「CommandButton1_Click」が自動で生成されています。

こちらに「コマンドボタン」をクリックした際の処理を記述します。以下の例ではExcelシートの「A1」セルに「テキストボックス」に入力されたテキストを入力するように記述しています。

userform09

「実行ボタン」を押して実行すると

userform10

Excelシート上に作成したフォームが表示され、操作することができます。

userform11

このサンプルの場合、「テキストボックス」にテキストを入力して「コマンドボタン」を押すと、Excelシート上に入力したテキストが表示されます。

userform12

ちなみに、「コマンドボタン」の表示文字などをデフォルトの「CommandButton1」から変更したい場合は、「プロパティ」の「Caption」を変更すると反映されます。

userform13

テキストを表示する方法

先ほどはテキストを入力する方法についてお伝えしました。テキストボックスを使うと、文字を表示することもできます。

ユーザーフォームの起動時にExcelシート上のセルからテキストを読み込んで表示する例をご紹介します。

Subプロシージャ「UserForm_Initialize」でフォーム起動時の処理を定義します。

テキストを取得、変更するにはTextプロパティを使います。

Private Sub UserForm_Initialize()
    TextBox1.Text = Range("A1").Text
End Sub

実行結果:
userform12

リストボックスの使い方

それでは、リストボックスの使い方についてみていきましょう。

リストボックスとは、いくつか登録したテキストの中から選択する場合に使用します。コンボボックスと似ています。

「ツールボックス」から「リストボックス」を選択して、ドラッグ&します。

userform26

userform27

あらかじめフォームが起動する際に、テキストを登録しておくには以下のように記述します。Subプロシージャ「UserForm_Initialize」でフォーム起動時の処理を定義します。

テキストを登録するには、AddItemメソッドを使います。以下のコードは「リストボックス」から選択した値を「コマンドボタン」を押すとExcelのシート状に表示されるように記述しています。

userform28

userform29

リストボックスの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

カレンダーの使い方

カレンダーの使い方についてみていきましょう。

Excel2007以前はAccessに付属の「カレンダーコントロール」を使用しましたが、Excel2010以降は削除されています。

Excel2010以降では、「Microsoft Date and Time Picker Control」(略してDTPicker)を使うようになっています。

詳しくは、こちらの公式サイトを参考にしてください
https://msdn.microsoft.com/ja-jp/library/office/gg251104(v=office.14).aspx

「Microsoft Date and Time Picker Control」は、「ツールボックス」に追加する必要があります。「ツールボックス」の「コントロール」タブの余白上で右クリックを押してください。

「その他のコントロール」をクリックしてください。

userform30

「Microsoft Date and Time Picker Control」を選んで「OK」ボタンを押してください。

userform31

「ツールボックス」に「DTPicker」が生成されていますので、これをフォームにドラッグ&ドロップします。

userform32

日付の「コンボボックス」が現れ、リストとしてカレンダーが表示されます。

userform33

「コマンドボタン」を押すと「DTPicker」の値がExcelのシート上に取得できるようにしましょう。

userform34

userform35

コンボボックスの使い方

次にコンボボックスの使い方についてみていきましょう。

コンボボックスとは、いくつか登録したテキストの中から選択する場合に使用します。「ツールボックス」から「コンボボックス」を選択し、フォームにドラッグ&ドロップします。

userform14

userform15

「コンボボックス」のテキストを登録するには、AddItemメソッドを使います。フォーム上の「コンボボックス」から入力して、テキストを登録することもできます。

また、あらかじめフォームが起動する際に、テキストを登録しておくこともできます。「コンボボックス」から入力して、テキストを登録する場合の処理の例は以下のとおりです。

「コンボボックス」にテキストを入力して、「コマンドボタン」を押すと登録されるように記述しています。

userform16

userform17

また、あらかじめフォームが起動する際に、テキストを登録しておくには以下のように記述します。

Subプロシージャ「UserForm_Initialize」でフォーム起動時の処理を定義します。

userform18

userform19

また、「コンボボックス」のリストの中から何が選ばれたか取得するには、ListIndexプロパティを使用します。

ListIndexプロパティは選択されたインデックス番号を返します。リスト内のテキストを取得したい場合は、Listメソッドを使用します。

userform20

userform21

コンボボックスの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

チェックボックスの使い方

それでは、チェックボックスの使い方についてみていきましょう。

チェックボックスとは、その項目が選択されているか、されていないか入力する場合に使います。

「ツールボックス」から「チェックボックス」を選択して、ドラッグ&します。
userform22

userform23

「コマンドボタン」を押したときに、どの「チェックボックス」が選択されているかメッセージボックスで表示する例が以下のようになります。

userform24

userform25

まとめ

ここでは、ユーザーフォームの使い方について説明しました。

Excelのシート入力だけでは入力フォームとして不足と感じる場合は、ユーザーフォームで使いやすい入力フォームを作れるようになると作業時間や入力ミスの削減になります。

使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次