
UserForm_Initializeでセル値を取得してから表示する方法

オリジナル入力フォームとして使えるエクセルVBAのユーザーフォーム。
ラベルやコマンドボタンを複数配置するのは当たりまえですが、顧客リストなどで名前や性別などをいちいちラベル名(Caption)を書き換えるのは面倒なので、ユーザーフォームが開いた瞬間に顧客リストなどから自動的に読み取って書き換えてくれたら便利だと思いませんか?

何もしていないままユーザーフォームを開くと、このようにLabel1~Label10のラベル名(Caption)のまま表示されますので、わざわざコマンドボタンを配置してクリックすることでラベル名が書き換わるようにしています。

こちらは設定後で、ユーザーフォームが開いた瞬間に自動的にラベル名が書き換わるので手間が省かれているので、わずかですが作業効率が上がります。
UserForm_Initialize(イニシャライズ)を使う
UserForm_Initializeとは、ユーザーフォームが表示される前に処理を実行するプログラムなので、記載されたプログラムを実行してからユーザーフォームを表示します。
このUserForm_Initializeは使用頻度が高いVBAコードで、設定も使い方もとても簡単なので手順に従って紹介します。
ユーザーフォームの作成

エクセルのユーザーフォーム作成するには、Visual Basic Editor(VBE)を開きますが、表示方法が分からない場合の説明は下記に記載していますのでここでは省略します。

まず最初に処理を実行してから開きたいユーザーフォーム自体を表示させるので、ここではUserForm1を表示させました。
UserForm_Initializeを表示させる
表示させたUserForm1が表示される前に処理を実行するプログラム、UserForm_InitializeにVBAコードを記述しますので、下記どちらの方法でも可能です。
- UserForm1自体をダブルクリックする
- UserForm1の画像の上で右クリックして「コードの表示」を選択
上記どちらかの方法を実行すると、UserForm_Clickという名のプログラムが表示されれいる画面に変わります。

カーソルが点滅していますが、ここにVBAコードを記述してもユーザーフォームが表示される前に処理を実行されません。
あくまでUserForm_Clickという名前の通り、ユーザーフォームをクリックしたらプログラムが実行されるので、ここでは使用しませんのでそのまま放置しても削除しても大丈夫です。
使うのはUserForm_Clickではなく、UserForm_Initializeなので切り替えますので、右上に表示されているClickの部分からプルダウンメニューより「Initialize」をクリックします。

クリックすると自動的にVBAコードが追加記載されます。

あとはカーソルが点滅している部分(UserForm_InitializeとEnd Sub)の間に、ユーザーフォームが表示する時に読み込むコードを書いておくだけで完了です。
UserForm_InitializeにVBAコード記述する

最初にもご紹介した画像で、UserForm1を表示する時はセルA1~A10に記載されている値(ここでは都道府県と都道府県番号)をLabel1~10に書き換えて表示するようにVBAコードを書いています。
ちなみに複数のラベル名をまとめて書き換える(繰り返し処理)を使用してみました。
Private Sub UserForm_Initialize()
For i = 1 To 10
With UserForm1.Controls(“Label” & i)
.Caption = Cells(i, 1).Value
End With
Next i
End Sub
まとめてラベル名を書き換える方法については下記に記載しています。

また、変数iにセルの値を足したり、引いたりもできるようになります。

UserForm_Initializeはラベル以外にもコマンドボタンのキャプションやテキストボックス、更にリストボックスのリストを取得することにも利用できます。