ユーザーフォームのラベルをセルの文字で表示させる方法
ラベルの表示をセルの値で自由に表示させたいと思いませんか?
例えば、今日の日付をユーザーフォームに配置したラベルに表示させるなら、日によって変わらなくちゃいけないですもんね。
プロパティで変更可能だけど、VBAコードで手短に設定したいですよね。
ラベルがセルの値に応じて自由自在に表示変更
ユーザーフォームのラベル(Label)とは、フォーム上に文字列を表示する為のコントロール(部品)です。
ラベルには直接文字入力などをするものではありませんが、フォーム上のお題(タイトル)や他のコントロールの説明書きなどに利用することが多いですね。
このラベルの名称変更は、ラベルコントロールのプロパティにあるCaptionで変更可能ですが、ちょっとした工夫しだいでとても便利なパーツになりますので、セルの値からラベル名を替えちゃいましょう。
ラベル名を文字列で設定する
Private Sub CommandButton1_Click()
UserForm1.Label1.Caption = “エクセルを学ぼう”
End Sub
あくまで基本だと思って見てください、このような使い方はしないのですが、コマンドボタンを押すと「エクセルを学ぼう」とユーザーフォームに配置したラベルの文字列が表示変更されます。
1つのラベル名をセルの値から取得
Private Sub CommandButton1_Click()
UserForm1.Label1.Caption = Range(“A1”).Text
End Sub
これも実際にはこんな使い方はしないのですが、コマンドボタンを押すとラベル1の表示がセルA1の値になります。
2つのラベル名をそれぞれセルの値から取得
Private Sub CommandButton1_Click()
UserForm1.Label1.Caption = Range(“A1”).Text
UserForm1.Label2.Caption = Range(“A2”).Text
End Sub
並べただけでできるようになるのでとても簡単ですね。
これぐらいの数なら楽だけどたくさんあったら大変ですが、根気よくこのまま書き続けても問題はありませんが、もしラベル100個あったらどうしますか?
複数のラベルをまとめてセルの値で表示する
では、実際に使う例としては、エクセル住所録でも実践しているのですが、フリガナ検索の時に使います。
スズキさんでフリガナ検索したら、該当した全ての鈴木さんが表示されるようにラベルをセルの値からまとめて表示しています。
住所録に必ず複数いる多い苗字ですもんね、一覧表として表示されると便利ですよ。
Private Sub CommandButton1_Click()
For i = 1 To 20
With UserForm1.Controls(“Label” & i)
.Caption = Cells(i+ 1, 5).Value
End With
End Sub
- コマンドボタン1が押されたら
- 変数iを宣言し、1~20まで行う
- ユーザーフォーム1のラベルiの名前はセルi+1の5列目(E列)の値とする
- Withステートメント終了
- 繰り返し処理
これで上図の左のラベル1~20が該当した鈴木さん6名の数字(顧客番号)が変わりました。
残り14名分は該当なし=空白セルとしたので、ラベル表示も消えました。
上右の図は顧客番号と名前になっているのでラベル21~40の名前も一緒にVBAコードに書き足しましょう。
Private Sub CommandButton1_Click()
For i = 1 To 20
With UserForm1.Controls(“Label” & i)
.Caption = Cells(i+ 1, 5).Value
End With
With UserForm1.Controls(“Label” & i+ 20)
.Caption = Cells(i + 1, 6).Value
End With
Next i
End Sub
このように変数iは同じなのでラベルを書き換えるWithステートメントのみ繰り返せば完成です。
データ検索してリストアップされた値をまとめてラベル表示
ラベルをセルの値で表示する方法をマスターしたら、ここでもお話しした鈴木さん住所録からリストアップして、ラベルにまとめて表示するという事をコマンドボタン1つにVBAコードを書いています。
鈴木さん検索➡リストアップ➡ラベルに表示
という流れで、エラー回避など下記項目を追加してフリガナ検索しています。
- フリガナ入力忘れて誤クリック時のエラーメッセージ
- 該当者がいない場合のメッセージ
- 検索フォームを閉じてリストフォーム表示
- リストアップ時に画面のチラつき防止処理
以上4つを加えてエクセル住所録を作成しているので、先ほどのサンプルコードと微妙に異なります。
Private Sub CommandButton7_Click()
Application.ScreenUpdating = False
If UserForm1.TextBox13 = “” Then
MsgBox (“フリガナが入力されていません”)
Else
Range(“Q12”).Value = UserForm1.TextBox13.Value
Dim myRange As Range, meRange As Range, myAddress As String, i As Integer
Set meRange = Range(“AD2:AD1001”)
Set myRange = meRange.Find(What:=Range(“Q12”).Value, LookIn:=xlValues)
If Not myRange Is Nothing Then
myAddress = myRange.Address
i = 2
Do
Cells(i, “BE”).Value = myRange.Offset(, -2).Value
Cells(i, “BF”).Value = myRange.Offset(, -1).Value
Set myRange = meRange.FindNext(After:=myRange)
i = i + 1
Loop Until myRange.Address = myAddress
For j = 1 To 20
With UserForm2.Controls(“Label” & j)
.Caption = Cells(j + 1, 57).Value
End With
With UserForm2.Controls(“Label” & j + 20)
.Caption = Cells(j + 1, 58).Value
End With
Next j
Unload UserForm1
UserForm2.Show
Range(“BE2:BF1000”).Value = “”
Else
MsgBox “該当者がいません”
End If
End If
Application.ScreenUpdating = True
End Sub
長すぎるVBAコードですよね。
でもこれで、目的がボタン1回押すだけで瞬時に表示するので仕事効率化できていますので、詳しくは住所録作成ページに記載しています。
意外と知らないラベルの活用法
ユーザーフォームのラベルはコマンドボタンやテキストボックスと並び、使用頻度の高いので早くマスターしてくださいね。
そしてこのラベルは文字列を表示するコントロールなので、直接入力できませんがタイトルや説明文などに使います。
ここまでが基本ですが、実はラベルをクリックするとVBAコードを書くことができるようになっています。
これを利用して、更にラベルに表示された顧客番号をクリックすると、次の展開に行けるようにしてあります。
顧客番号が分からなかったからエクセル住所録のデータ修正ができなかったので、フリガナで検索して番号が確認できました。
いちいち番号を覚えておいてユーザーフォームを切り替えて修正フォームに改めて番号入力って手間だと思いませんか?
ラベルをクリックしたら番号が入力されている状態で修正フォームが開けば理想ですよね。
Private Sub Label1_Click()
Range(“P11”).Value = UserForm2.Label1.Caption
UserForm1.TextBox1.Value = Range(“P11”).Value
Unload UserForm2
UserForm1.Show
End Sub
- ラベル1を押したら
- ユーザーフォーム2のラベル名をセルP11へ入力する
- ユーザーフォーム1のテキストボックス1の値はセルP11の値とする
- ユーザーフォーム2を閉じる
- ユーザーフォーム1を開く
意外と単純だと思いませんか?これなら活用できそうですよね。
ラベルプロパティ設定でCaptionを設定
テキストボックスのタイトルや説明文にラベルを使うならば、セルの値から取得する必要がない事もあります。
そのような場合は、わざわざVBAコードを使うのではなく、ラベルのプロパティで簡単に設定しましょう。
1、名前を変更したいラベルをクリック
2、プロパティウィンドウが左下に表示されます
3、文字列の変更はCaptionをクリック
「Label1」を任意の文字列に書き換えれば完成です。