ユーザーフォームのラベル名(Label)をセルの値に連動して
Captionを自由自在に変えたいと思ったことありませんか?
このユーザーフォームでラベル(Label)を使うのはごく自然で、テキストボックスの説明やタイトルに使ってることが多いと思います。
このラベル(Label)の名前はユーザーフォームのプロパティにあるCaptionで好きな名前を付けることができます。
スポンサーリンク
Label1 CaptionにセルA1の値
例えば、ユーザーフォーム1のLabel1の名前(Caption)をセルA1の文字や数字に連動して表示を変えるには、下記のようにコードを記述すれば可能です。
ふたつある場合は、Label1のCaptionはセルA1でLabel2のcaptionはセルA2の場合は、
UserForm1.Label2.Caption = Range(“A2”).Text
単純にそれぞれコードを書けばいいだけです。
このように数が少なければ問題ないのですが、10個・20個・・・それ以上なんてなったら大変な作業になります。
まとめて一括処理できないかなぁ~?
For~Nextを使う
エクセルVBAで多く使われているFor~Nextですが、「指定した回数だけ処理を繰り返す」というものです。
「顧客情報入力フォーム」で、名前や住所など必要入力項目をテキストボックスに入れ、コマンドボタンでリストに転記した時に入力データが間違っていないか確認の為、ユーザーフォームに表示できるように住所録でも使っているます。
そうすると、必要項目の数だけ転記したいセルの値があり、それぞれラベルに表示させなくてはいけなくなります。
たくさんあったら大変なので、まとめて一括処理しましょう。
実際には下記のようなコードを書いています。
For i = 1 To 16
With UserForm1.Controls(“Label” & i )
.Caption = Cells(i, 1)
End With
Next i
End Sub
これが基本的に繰り返しセルの値を取得してラベルの名前を書き換えるというVBAコードになります。
- ユーザーフォームのコマンドボタン(CommandButton1)を押したら
- 数字が変わる部分を変数「i」として、変わる数字が1~16
- ユーザーフォーム(UserForm1)に設置されているコントロールのラベル(Label「i」も1~16)も一緒に変える
- ラベル名(Label Caption)はセル「i」行目の1列目
- この作業を「i」に書いてある1~16まで繰り返して行う
- マクロ終了
これでLabel1~Label16までセルA1~A16までの値を順番にラベル名(Caption)を一括書き換えてくれます。
VBAを学校などで教わっていないので、たったこれだけのコードにたどり着くのに1時間もかかっちゃった。
やっとできたので実際の住所録へ組み込んでみましたが、実際にはこのままでは使えません。
なぜなら、VBAコードの場合必ずLabel番号とセルの番号が一致していないとダメなのです。
表示を変えたいラベルが必ずしもLabel1とは限らず、実際の住所録で使うときもLabel17~Label64で、取得したいセルはR5~R52で「For~Next」の指定した回数処理を繰り返すは使えるのですが、変数「i」をどうしたらいいのか悪戦苦闘。
2時間格闘してやっとたどり着いた!
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に代えるだけで対応できますよ!
ご覧いただきありがとうございます。
ブログランキングに登録しています。
少しでもお役に立てれば幸いで、参考になったようでしたら応援よろしくお願いします。
エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?