エクセルでオリジナルの入力画面が作ることができるユーザーフォーム。
ボウリングのリーグ戦での成績表でも使っていますが、ユーザーフォームを表示する時に配置したラベル名が名前や日付などが自動的にセルの値を読み込んで書き換えてから表示されると便利なので、やってみませんか?
ユーザーフォームを表示する方法
まずは基本的なユーザーフォームを表示するVBAコードは、シンプルで簡単ですよね。
ユーザーフォームを表示する
UserForm1.Show
End Sub
- コマンドボタン1を押したら
- ユーザーフォーム1を表示する
- マクロ終了
ユーザーフォームを閉じる
Unload UserForm1
End Sub
- コマンドボタン1を押したら
- ユーザーフォーム1を閉じる
- マクロ終了
ユーザーフォームを閉じて別のユーザーフォームを表示する
Unload UserForm1
UserForm2.Show
End Sub
- コマンドボタン1を押したら
- ユーザーフォーム1を閉じる
- ユーザーフォーム2を表示する
- マクロ終了
実際エクセルで作っているボウリングリーグ戦の成績表では、このユーザーフォームを閉じて別のユーザーフォームを開くことが一番多く使っています。
ここまでが基本的なユーザーフォームほ表示・閉じる方法です。
次にユーザーフォームを開く時に、配置されているラベル名をセルの値から読み込んで表示させるようにしましょう。
ユーザーフォームを開く時にラベル名を書き換えて表示
VBAコードは、上から順番にプログラムを実行しますので、UserForm2.Showの前に読み込むVBAコードを書かなくてはいけません。
ここでは、ユーザーフォーム1に配置されたコマンドボタン1を押すと、セルA1の値を読み込んでラベル1を書き換えてからユーザーフォーム2を表示する方法です。
Unload UserForm1
UserForm2.Label1.Caption = Range(“A1”).Value
UserForm2.Show
End Sub
- コマンドボタン1を押すと
- ユーザーフォーム1を閉じる
- ユーザーフォーム2に配置されたラベル1の名前をセルA1の値にする
- ユーザーフォーム2を表示
- マクロ終了
となり、これでユーザーフォーム2が表示されるとラベル名がセルA1の値に書き換えられて表示されます。
ところが、実際にはユーザーフォームに配置されたラベルは1個って事ありませんよね。
この画像は、実際にボウリングのリーグ戦での成績表で使っている参加選手登録用のユーザーフォームです。
名前などが表示されるのですが、ラベルが複数というよりたくさんあります。
1個1個VBAコード書いていられないので、一気に書き換えています。
ユーザーフォームを開く時に複数のラベル名を書き換えて表示
書き換えたいのは、Label1~Label32で、このユーザーフォームを表示すると自動的にLabelが参加選手名に書き換えられるようにしてあります。
Unload UserForm1
For i = 1 To 32
With UserForm2.Controls(“Label” & i)
.Caption = Cells(i + 2, 11).Value
End With
Next i
UserForm2.Show
End Sub
- コマンドボタン1を押すと
- ユーザーフォーム1を閉じる
- 繰り返し処理の変数「i」を宣言し、変数は1~32とする
- ユーザーフォーム2に配置したラベル「i」も一緒にセルi行目+2、11列目の値にする
- Withステートメント終了
- 繰り返し処理をする
- ユーザーフォーム2を表示
- マクロ終了
これで、ラベル1~32までの名前は(Caption)セルK3~K34までの値に書き換えて表示するようになります。
ちなみにLabelをCommandButtonに変えれば、コマンドボタンのキャプション名も自動的に変更できますよ!

Excel-VBAを使えば数分かかる作業がたったの1秒で終了しますよ!