ユーザーフォームを開く時に名前を書き換えて表示する方法

ユーザーフォーム1 Excel-VBA
スポンサーリンク

エクセルでオリジナルの入力画面が作ることができるユーザーフォーム。

ボウリングのリーグ戦での成績表でも使っていますが、ユーザーフォームを表示する時に配置したラベル名が名前や日付などが自動的にセルの値を読み込んで書き換えてから表示されると便利なので、やってみませんか?

ユーザーフォームを表示する方法

まずは基本的なユーザーフォームを表示するVBAコードは、シンプルで簡単ですよね。

ここでは、ユーザーフォームに配置したコマンドボタンにVBAコードを配置することを前提に書きます。

ユーザーフォームを表示する

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
  1. コマンドボタン1を押したら
  2. ユーザーフォーム1を表示する
  3. マクロ終了

ユーザーフォームを閉じる

Private Sub CommandButton1_Click()
Unload UserForm1
End Sub
  1. コマンドボタン1を押したら
  2. ユーザーフォーム1を閉じる
  3. マクロ終了

ユーザーフォームを閉じて別のユーザーフォームを表示する

Private Sub CommandButton1_Click()
Unload UserForm1
UserForm2.Show
End Sub
  1. コマンドボタン1を押したら
  2. ユーザーフォーム1を閉じる
  3. ユーザーフォーム2を表示する
  4. マクロ終了

実際エクセルで作っているボウリングリーグ戦の成績表では、このユーザーフォームを閉じて別のユーザーフォームを開くことが一番多く使っています。

ここまでが基本的なユーザーフォームほ表示・閉じる方法です。

次にユーザーフォームを開く時に、配置されているラベル名をセルの値から読み込んで表示させるようにしましょう。

ユーザーフォームを開く時にラベル名を書き換えて表示

VBAコードは、上から順番にプログラムを実行しますので、UserForm2.Showの前に読み込むVBAコードを書かなくてはいけません。

ここでは、ユーザーフォーム1に配置されたコマンドボタン1を押すと、セルA1の値を読み込んでラベル1を書き換えてからユーザーフォーム2を表示する方法です。

Private Sub CommandButton1_Click()
Unload UserForm1
UserForm2.Label1.Caption = Range(“A1”).Value
UserForm2.Show
End Sub
  1. コマンドボタン1を押すと
  2. ユーザーフォーム1を閉じる
  3. ユーザーフォーム2に配置されたラベル1の名前をセルA1の値にする
  4. ユーザーフォーム2を表示
  5. マクロ終了

となり、これでユーザーフォーム2が表示されるとラベル名がセルA1の値に書き換えられて表示されます。

ところが、実際にはユーザーフォームに配置されたラベルは1個って事ありませんよね。

ユーザーフォーム

この画像は、実際にボウリングのリーグ戦での成績表で使っている参加選手登録用のユーザーフォームです。

名前などが表示されるのですが、ラベルが複数というよりたくさんあります。

1個1個VBAコード書いていられないので、一気に書き換えています。
スポンサーリンク

ユーザーフォームを開く時に複数のラベル名を書き換えて表示

書き換えたいのは、Label1~Label32で、このユーザーフォームを表示すると自動的にLabelが参加選手名に書き換えられるようにしてあります。

Private Sub CommandButton1_Click()
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を押すと
  2. ユーザーフォーム1を閉じる
  3. 繰り返し処理の変数「i」を宣言し、変数は1~32とする
  4. ユーザーフォーム2に配置したラベル「i」も一緒にセルi行目+2、11列目の値にする
  5. Withステートメント終了
  6. 繰り返し処理をする
  7. ユーザーフォーム2を表示
  8. マクロ終了

これで、ラベル1~32までの名前は(Caption)セルK3~K34までの値に書き換えて表示するようになります。

波乗りアヒル
波乗りアヒル

ちなみにLabelをCommandButtonに変えれば、コマンドボタンのキャプション名も自動的に変更できますよ!

各コントロールまとめて転記シリーズ

ユーザーフォームを使うと配置したコントロール(テキストボックスやラベルなど)とセルとの間で値のやり取りが多くなります。

よく使うのでまとめてみました。

値の場所転記したい場所説明ページ
セルの値ラベル名VBAコード
セルの値テキストボックスの値VBAコード
セルの値コマンドボタンの表示名VBAコード
セルの値セルの値VBAコード
テキストボックス入力値セルの値VBAコード
波乗りアヒル
波乗りアヒル

成績表作成には知っておきたいExcel-VBAもくじ

ボウリングハンデキャップのつけ方
HDCPの種類はリーグのルールにより複雑に ボウリングの成績表(リーグ戦)で必ず必要になるのが、ハンデキャップ(HDCP)です。 ボウリングご予約の時に一番多く使われているのが、女性にだけハンデキャップをつけてあげることが多いですね。 だいだい何点ぐらいのハンデキャップが多いの?
ボウリングリーグ対戦表の数字を名前に自動変換する方法
リーグ戦の対戦表をエクセルで作る時、数字で表されている番号を名前に自動的に変換できると作業時間が短くなり効率的ですね。たった2つのエクセル関数を使うだけで、簡単にできるんです。今回の回戦数を入力するだけで一発変換完了。もちろんお客様にスケジュール対戦表として渡すことも簡単ですよ。
人数に応じてリーグ対戦表を自動選択する方法
複数の表があり、条件に合った表を選んで、さらにセルの値を選んで数字を名前に自動変換できると、とても便利なエクセルができますよね。ボウリングのリーグ対戦表も人数により表が異なるので、参加人数が決まったら、自動的に表を選んで対戦番号がこれも自動的に参加者名に変換されると便利で作業効率がアップして時間短縮になりますよ。
波乗りアヒル
波乗りアヒル

エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?

VBA作成中によくあるエラー

エクセルVBAで様々な表などを作っていると、今まで出来ていたことが急にできなくなったりした経験はありませんか?

そんな個人的な経験を書いてみました。


スポンサーリンク


コメント