Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。cocoon ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /home/xs182025/consulting-campus.site/public_html/wp-includes/functions.php on line 6114
【VBA】ユーザーフォームでUIをつける (テキスト・リスト等) | CONSULTING CAMPUS

【VBA】ユーザーフォームでUIをつける (テキスト・リスト等)

how-to-use-userform-for-VBA VBA
この記事は約8分で読めます。
スポンサーリンク

Microsoft VBAにおけるユーザーフォーム (UserForm)は、カスタマイズ可能なユーザーインターフェース (UI) を作成するための強力なツールです。本記事では、基本的な使い方からVBAと併せた実用的なコーディングまで、テキストボックスやリストボックスなどを例に紹介します。

本記事で実装する処理

本記事ではエクセルの画面上で説明していますが、その他のオフィスアプリ (PowerPoint、Word、Outlookなど) でも同様の動作となります。

スポンサーリンク

結論

VBA上でのユーザーフォーム操作は下記のステップで実行可能です。詳しい解説については各セクションで行っています。
(クリックで該当セクションにジャンプします)

ユーザーフォームの作成

はじめに、VBAでユーザーフォームを作成する方法をご紹介します。

  1. VBAエディタの表示:
    ExcelやWordなどのMicrosoft OfficeアプリケーションでAlt + F11キーを押すとVBAエディタが開きます。これはVBAの開発環境で、ここでプログラムの編集やデバッグを行います。
  2. ユーザーフォームの追加:
    VBAエディタのメニューバーで[挿入]→[ユーザーフォーム]を選択します。これにより、新しいユーザーフォームがプロジェクトに追加され、デザイン画面が表示されます。

以上がユーザーフォームを作成する方法になります。ここで作成したユーザーフォームはVBAプロジェクト内に保存され、VBAコードから呼び出すことができるようになります。次のセクションでは、ユーザーフォームのカスタマイズ方法を解説します。

ユーザーフォームのカスタマイズ

こちらのセクションでは、作成したユーザーフォームのデザインや設定をカスタマイズする方法をご紹介します。ユーザーフォームの基本的な動作は下記を覚えておけば十分でしょう。

コントロールオブジェクトの追加

左のツールボックスからボタン、テキストボックス、ラベル、コンボボックスなどのコントロールをフォームにドラッグ&ドロップして追加できます。

コントロールのサイズ変更

コントロールオブジェクト及びユーザーフォーム自体のサイズを変更する場合は、オブジェクトの端をドラッグすることで任意の大きさに調整できます。薄い網掛けで表示されている部分までが各コントロールオブジェクトのサイズになりますので、デザインの際には気をつけてください。

プロパティの編集 (表示名やフォントなど)

UserForm自体または各オブジェクトのプロパティ(表示名やフォントなど)を編集する場合、プロパティウィンドウから編集することができます。

以下はよく使用するプロパティとその編集方法を示しています。

  • (オブジェクト名): VBAでのコードなどで参照されるオブジェクトの名前となります。{オブジェクト名}_Click()などのイベントハンドラもこのオブジェクト名を使用して実行されるので変更の際は注意してください
  • Caption: オブジェクトの表示名を編集します。ボタンではラベル、UserFormでは左上に表示されるテキストになります
  • Default: Trueに設定するとEnterキーを押した際のデフォルトアクションとして実行されるボタンなどとして設定できます

VBAからユーザーフォームへのアクセス

本セクションでは、ユーザーフォーム側での設定を完了させた後に、通常のVBA (関数・モジュール・クラス) を使用してユーザーフォームにアクセスし、フォームを表示したりフォーム上のアイテムを操作したりする方法について説明します。

ユーザーフォームの表示

VBAコードからユーザーフォームを表示するには、Show メソッドを使用します。

Sub ShowUserForm()
    UserForm1.Show() ' UserForm1を表示
End Sub

このコードは、UserForm1 という名前のフォームを表示します。フォームの名前は、作成したユーザーフォームの名前に応じて変更してください。

ユーザーフォーム内のコントロールへのアクセス

フォーム内の各コントロール(テキストボックス、ラベル、ボタンなど)にアクセスして、そのプロパティを変更したり、値を取得したりすることができます。

例えば、テキストボックスにテキストを設定する場合は以下のようにします。

Sub ShowUserFormWithText()
    UserForm1.TextBox1.Text = "Hello, World!" ' テキストボックスの入力値を設定
    UserForm1.Show()
End Sub

このコードは、UserForm1 上の TextBox1 という名前のテキストボックスに文字列 “Hello, World!” を設定しています。その後、UseFormを表示しています。

また、コントロールのプロパティ (例えば、コントロールの可視性、色、フォントなど) もVBAコードから変更することができます。

下記のコードでは先程から、TextBox1の背景を赤色にするよう追記しています。

Sub ShowUserFormWithText()
    UserForm1.TextBox1.Text = "Hello, World!"
    UserForm1.TextBox1.BackColor = RGB(255, 0, 0) 'テキストボックスの背景を赤く
    UserForm1.Show()
End Sub

この他にも、ListBoxを使用している場合は、UserForm.ListBox1.AddItemを使用して表示アイテムの追加などを行なえます。

ユーザーフォームのクローズ

ユーザーフォームをプログラム的に閉じるには、Hide メソッドまたは Unload ステートメントを使用します。

UserForm1.Hide

または

Unload UserForm1

上記2つのアプローチの違いは下記のとおりです。

  • Hide メソッド: フォームを見た目上隠すだけで、フォームとその状態はメモリに残ります。
  • Unload ステートメント: フォームをメモリから完全に削除します。

以上が、VBAからユーザーフォームにアクセスする方法解説になります。

ユーザーフォームからVBAへのアクセス

最後に、ユーザーフォームから通常のモジュールやクラス、関数へのアクセスについて解説します。

前提: なお、UserForm側でのコードの使用 (イベントハンドラなどの記述) はUserFormを右クリックし、[コードの表示]から行ってください。

イベントハンドラの使用

イベントハンドラは、ユーザーフォーム上のコントロール(例えばボタンやテキストボックス)に対する特定のイベント(例えばクリックやテキスト変更)が発生したときに実行されるプロシージャです。ここではボタンクリックイベントの例をご紹介します。

Private Sub CommandButton1_Click()
    MsgBox "ボタンがクリックされました" ' ボタンのクリック時にメッセージを表示
End Sub
モジュールや関数の呼び出し

ユーザーフォームのイベントハンドラからモジュール内のサブルーチンや関数を呼び出すことができます。これにより、コードの再利用性が高まり、モジュール化されたロジックを使いまわすことが可能です。
例えば、Module1内に次のようなサブルーチンがあるとします。

Sub GreetUser()
    MsgBox "こんにちは、ユーザー!"
End Sub

このサブルーチンはユーザーフォームのイベントハンドラから次のように呼び出せます。

Private Sub CommandButton1_Click()
    ' Module1のGreetUserサブルーチンを呼び出す
    Module1.GreetUser
End Sub
データの授受

最後に、イベントハンドラから通常のモジュールやクラス、関数を呼び出す際に、UserForm上の値を受け渡す方法を解説します。ユーザーフォームとモジュール間でデータの授受を行うには、モジュールの関数やサブルーチンに引数を渡すか、モジュールから公開された変数やプロパティを利用します。ここではTextBox1の内容をモジュールのサブルーチンに渡し、処理する例を紹介します。

先程のコードを調整して、モジュール内のGreetUserが引数を受け取るようにします。

Sub GreetUser(ByVal text As String)
    MsgBox "こんにちは、" & text & "!"
End Sub

次に、UserForm内のイベントハンドラが実行時にTextBox1の値を受け渡すようにします。

Private Sub CommandButton1_Click()
    ' Module1のGreetUserサブルーチンを呼び出す
    Module1.GreetUser TextBox1.Text
End Sub

おわりに

以上が、VBAでテキストやリストなどのユーザーフォームでUIをつける方法の解説になります。

ご質問やご不明点がある場合はお気軽にコメントお待ちしております。

ご精読いただきありがとうございました。

コメント

タイトルとURLをコピーしました