ユーザーフォームのラベルをセルの文字で表示させる方法

userform ラベル

ラベルの表示をセルの値で自由に表示させたいと思いませんか?

例えば、今日の日付をユーザーフォームに配置したラベルに表示させるなら、日によって変わらなくちゃいけないですもんね。

プロパティで変更可能だけど、VBAコードで手短に設定したいですよね。

スポンサーリンク

ラベルがセルの値に応じて自由自在に表示変更

ユーザーフォームのラベル(Label)とは、フォーム上に文字列を表示する為のコントロール(部品)です。

ラベルには直接文字入力などをするものではありませんが、フォーム上のお題(タイトル)や他のコントロールの説明書きなどに利用することが多いですね。

このラベルの名称変更は、ラベルコントロールのプロパティにあるCaptionで変更可能ですが、ちょっとした工夫しだいでとても便利なパーツになりますので、セルの値からラベル名を替えちゃいましょう。

ラベル名を文字列で設定する

ラベル名+Captionプロパティで文字列指定

Private Sub CommandButton1_Click()
UserForm1.Label1.Caption = “エクセルを学ぼう”
End Sub

あくまで基本だと思って見てください、このような使い方はしないのですが、コマンドボタンを押すと「エクセルを学ぼう」とユーザーフォームに配置したラベルの文字列が表示変更されます。

1つのラベル名をセルの値から取得

セルA1の値をラベル1に表示するVBAコード

Private Sub CommandButton1_Click()
UserForm1.Label1.Caption = Range(“A1”).Text
End Sub

これも実際にはこんな使い方はしないのですが、コマンドボタンを押すとラベル1の表示がセルA1の値になります。

2つのラベル名をそれぞれセルの値から取得

セルA1はラベル1でセルA2はラベル2へ

Private Sub CommandButton1_Click()
UserForm1.Label1.Caption = Range(“A1”).Text
UserForm1.Label2.Caption = Range(“A2”).Text
End Sub

並べただけでできるようになるのでとても簡単ですね。

これぐらいの数なら楽だけどたくさんあったら大変なのですが、根気よくこのまま書き続けても問題はありませんよ。

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

もしラベル100個あったらどうしますか?

複数のラベルをまとめてセルの値で表示する

では、実際に使う例としては、エクセル住所録でも実践しているのですが、フリガナ検索の時に使います。

スズキさんでフリガナ検索したら、該当した全ての鈴木さんが表示されるようにラベルをセルの値からまとめて表示しています。

住所録に必ず複数いる多い苗字ですもんね、一覧表として表示されると便利ですよ。

フリガナ検索結果フォーム

VBAユーザーフォームでラベルを準備

フリガナ検索結果

検索結果としてラベル名が変わった

ラベルをまとめてセルの値を表示するVBAコード

Private Sub CommandButton1_Click()
For i = 1 To 20
With UserForm1.Controls(“Label” & i)
.Caption = Cells(i+ 1, 5).Value
End With
End Sub

VBA解説
  1. コマンドボタン1が押されたら
  2. 変数iを宣言し、1~20まで行う
  3. ユーザーフォーム1のラベルiの名前はセルi+1の5列目(E列)の値とする
  4. Withステートメント終了
  5. 繰り返し処理

これで上図の左のラベル1~20が該当した鈴木さん6名の数字(顧客番号)が変わりました。

残り14名分は該当なし=空白セルとしたので、ラベル表示も消えました。

上右の図は顧客番号と名前になっているのでラベル21~40の名前も一緒にVBAコードに書き足しましょう。

各ラベルに顧客番号・名前を表示する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コードを書いています。

鈴木さん検索➡リストアップ➡ラベルに表示

という流れで、エラー回避など下記項目を追加してフリガナ検索しています。

  1. フリガナ入力忘れて誤クリック時のエラーメッセージ
  2. 該当者がいない場合のメッセージ
  3. 検索フォームを閉じてリストフォーム表示
  4. リストアップ時に画面のチラつき防止処理

以上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回押すだけで瞬時に表示するので仕事効率化できていますよ。

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

詳しくは住所録作成ページに記載しております。

スポンサーリンク

意外と知らないラベルの活用法

ユーザーフォームのラベルはコマンドボタンやテキストボックスと並び、使用頻度の高いので早くマスターしてくださいね。

そしてこのラベルは文字列を表示するコントロールなので、直接入力できませんがタイトルや説明文などに使います。

ここまでが基本ですが、実はラベルをクリックするとVBAコードを書くことができるようになっています。

ラベルクリックしてコマンドボタンのように使える
ラベルクリックしてコマンドボタンのように使える

これを利用して、更にラベルに表示された顧客番号をクリックすると、次の展開に行けるようにしてあります。

顧客番号が分からなかったからエクセル住所録のデータ修正ができなかったので、フリガナで検索して番号が確認できました。

いちいち番号を覚えておいてユーザーフォームを切り替えて修正フォームに改めて番号入力って手間だと思いませんか?

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

ラベルをクリックしたら番号が入力されている状態で修正フォームが開けば理想ですよね。

こうすれば実現できます。

ラベルをクリックして活用

Private Sub Label1_Click()
Range(“P11”).Value = UserForm2.Label1.Caption
UserForm1.TextBox1.Value = Range(“P11”).Value
Unload UserForm2
UserForm1.Show
End Sub

VBA解説
  1. ラベル1を押したら
  2. ユーザーフォーム2のラベル名をセルP11へ入力する
  3. ユーザーフォーム1のテキストボックス1の値はセルP11の値とする
  4. ユーザーフォーム2を閉じる
  5. ユーザーフォーム1を開く

意外と単純だと思いませんか?これなら活用できそうですよね。

スポンサーリンク

ラベルプロパティ設定でCaptionを設定

テキストボックスのタイトルや説明文にラベルを使うならば、セルの値から取得する必要がない事もあります。

そのような場合は、わざわざVBAコードを使うのではなく、ラベルのプロパティで簡単に設定しましょう。

1、名前を変更したいラベルをクリック

ラベル
ラベル

2、プロパティウィンドウが左下に表示されます

ラベルプロパティ
プロパティウィンドウ

3、文字列の変更はCaptionをクリック

ラベルキャプション
ラベルキャプション

「Label1」を任意の文字列に書き換えれば完成です。

スポンサーリンク

ユーザーフォームでオリジナルフォーム作ろう

エクセルの作業時間を短縮して効率よく作業を可能にする「ユーザーフォーム」を使いこなすには、基本を押さえておきましょう。

1日400人ぐらいの方が見ていただいている意外と人気ページなんです。

文字を入力するのに絶対使うTextBox

ユーザーフォームにテキストボックスを使わないで済むのは、確認画面ぐらいかな?

テキストボックスとセルをリンクさせる様々な方法を組み合わせれば、作業時間はあっという間に短縮できます。

文字列だけじゃない!Labelもクリックできるので可能性大

ラベルといえばテキストボックスの説明として文字列で表示させるのが、基本の使い方ですがクリックするとプログラムを実行させることもできるのです。

工夫次第でできることは無限大に広がります。

どんなVBAコードをコマンドボタンに記述しますか?

ボタンをクリックすると記述したプログラムが作動して、繰り返し作業や手間がかかったことが一瞬で完了させることができます。

あんなこともこんなこともできちゃいますよ。

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

ご覧いただきありがとうございます。

ブログランキングに登録しています。

少しでもお役に立てれば幸いで、参考になったようでしたら応援よろしくお願いします。


Microsoft Officeランキング

ユーザーフォームを使えばこんなに便利に早く作業が終わりますよ
波乗りアヒル
波乗りアヒル

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