ユーザーフォームのラベル名をセルの値に一括書き換えする方法

ユーザーフォームのラベル名(Label)をセルの値に連動してCaptionを自由自在に変えたいと思ったことありませんか?

このユーザーフォームでラベル(Label)を使うのはごく自然で、テキストボックスの説明やタイトルに使ってることが多いと思います。

ラベル(Label)の名前はユーザーフォームのプロパティにあるCaptionで好きな名前を付けることができます。

目次

Label1 CaptionにセルA1の値

例えば、ユーザーフォーム1のLabel1の名前(Caption)をセルA1の文字や数字に連動して表示を変えるには、下記のようにコードを記述すれば可能です。

VBAコード

UserForm1.Label1.Caption = Range(“A1”).Text

ふたつある場合は、Label1のCaptionはセルA1でLabel2のcaptionはセルA2の場合は、

VBAコード

UserForm1.Label1.Caption = Range(“A1”).Text
UserForm1.Label2.Caption = Range(“A2”).Text

単純にそれぞれコードを書けばいいだけです。

このように数が少なければ問題ないのですが、10個・20個・・・それ以上なんてなったら大変な作業になりますので、まとめて一括処理しましょう。

For~Nextを使う

エクセルVBAで多く使われているFor~Nextですが、「指定した回数だけ処理を繰り返す」というものです。

「顧客情報入力フォーム」で、名前や住所など必要入力項目をテキストボックスに入れ、コマンドボタンでリストに転記した時に入力データが間違っていないか確認の為、ユーザーフォームに表示できるように住所録でも使っているます。

そうすると、必要項目の数だけ転記したいセルの値があり、それぞれラベルに表示させなくてはいけなくなります。

たくさんあったら大変なので、まとめて一括処理しましょう。

これが基本的に繰り返しセルの値を取得してラベルの名前を書き換えるというVBAコードになります。

VBAコード

Private Sub CommandButton1_Click()
For i = 1 To 16
With UserForm1.Controls(“Label” & i )
.Caption = Cells(i, 1)
End With
Next i
End Sub

解説
  1. ユーザーフォームのコマンドボタン(CommandButton1)を押したら
  2. 数字が変わる部分を変数「i」として、変わる数字が1~16
  3. ユーザーフォーム(UserForm1)に設置されているコントロールのラベル(Label「i」も1~16)も一緒に変える
  4. ラベル名(Label Caption)はセル「i」行目の1列目
  5. この作業を「i」に書いてある1~16まで繰り返して行う
  6. マクロ終了

これでLabel1~Label16までセルA1~A16までの値を順番にラベル名(Caption)を一括書き換えてくれます。

やっとできたので実際の住所録へ組み込んでみましたが、実際にはこのままでは使えません。

なぜなら、VBAコードの場合必ずLabel番号とセルの番号が一致していないとダメなのです。

表示を変えたいラベルが必ずしもLabel1とは限らず、実際の住所録で使うときもLabel17~Label64で、取得したいセルはR5~R52で「For~Next」の指定した回数処理を繰り返すは使えるのですが、変数「i」を使います。

VBAコード

Private Sub CommandButton1_Click()
For i = 5 To 52
With UserForm1.Controls(“Label” & i + 12)
.Caption = Cells(i, 18)
End With
Next i
End Sub

変更した部分は3か所。

  • 変数「i」を取得したいセルに合わせて5行目から52行目に変更
  • 表示を代えたいラベルは17~64で変数「i」の最初が5なので12足したら17になるから+12を付け加えてみたら大成功
  • 取得したいセルはR列なのでR列はA列から数えると18に変更

ラベルの数がそもそも繰り返し処理の数だけユーザーフォームに設置されていないとエラーになります。

その場合ラベルの数の範囲内で変数を指定すれば使いまわしも成功しています。

ちなみにコマンドボタンのキャプションを変更したい場合はLabelをCommandButtonに代えるだけで対応できますよ!

ユーザーフォームを閉じて次のフォームを開く時に一括書き換える

この一括書き換えは、ユーザーフォームを表示している最中だけでなく、1つのユーザーフォームを閉じて別のユーザーフォームを開く時に組み合わせて使うこともできます。

ボウリングのリーグ戦成績表では、参加選手登録用のユーザーフォームを閉じて次のユーザーフォームを表示する際に、この「For~Next」処理を挟むことで、次のフォームに配置されたLabel132が自動的に参加選手名に書き換わってから表示されるようにしています。

VBAコード

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個のフォームで完結させるよりも画面がすっきりし、用途に応じてフォームを使い分けたい時に便利な使い方です。

目次