ユーザーフォームのリストボックスの使い方

リストボックス

スポンサーリンク


スポンサーリンク


スポンサーリンク

リスト項目をセル範囲から取得表示する

オリジナルの入力フォームを作ることができるユーザーフォームでちょっとめんどくさいと思った経験ありませんか?

またいつも同じ文字や決まった数字を入力していませんか?

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

仕事効率化の為にエクセル自動化しようとエクセルVBAを使っているのに・・・

ツールボックス

これはユーザーフォームに配置できるパーツで、「ツールボックス」といいます。

このリストボックスはテキストボックスとは違い、自由に文字を入れることはできませんが、リスト形式で文字や数字などのあらかじめ決めておいたデータの中から選ぶだけになっているので入力の手間がちょっとは省略できますね。

それでは、以前はカレンダーコントロールを使って生年月日を入力していたのですが、生年月日入力には不向きなので現在では誕生日入力はリストボックスを使うようにしています。

1、リストボックスに表示する項目をセルに入力して準備します

リストボックスは指定したセルの値を読み込んでリストボックス内に表示されるようになっているので、まず最初にワークシートにリストボックスに表示したい項目をセルに入力しておきます。

ここでは、右記のようにセルに入力して準備しています。画像の都合上、15行だけ切り取っています。

  • セル【A1~A200】に和暦を入力
  • セル【B1~B12】に誕生月を入力
  • セル【C1~C31】に日にちを入力

スポンサーリンク


2、リストボックスに作成したリストを表示する

リストボックスをユーザーフォームに配置した時は、まだ空欄なのでリストボックスをクリックすると、リストボックスのプロパティが表示されます。

先ほどワークシートに予め準備しておいた、表示したい項目(ここでは和暦)をリストボックス(ListBox1)の【RowSource】に登録します。

和暦はセルA1からA200に入力したので【A1:A200】と入力するとリストボックスに反映され表示します。

同じ作業を繰り返します。

ListBox2には、誕生月なので【B1:B12】

ListBox3には、日にちなので【C1:C31】

これですべての表示設定は完了です。

但し、このままでは和暦が毎回昭和1年が表示されて毎回スクロールが必要なので、キーボードの上下矢印を使って、最初に表示する和暦を選んでおくとスクロールの範囲が少なくなるのでお勧めします。

listboxプロパティ

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

左の状態よりも右の方が使い易いと思いませんか?

 

3、リストから選んだ日付をセルに転記する方法

最後にリストボックスで選んだ日付をセルに転記するコードをコマンドボタンに記述します。

セルの場所などは実際に住所録で使っているコードをそのまま記載した。

Private Sub CommandButton3_Click()
With ListBox1
If .ListIndex = -1 Then
Range(“B1”).Offset(1).Value = “”
Else
Range(“B1”).Offset(1, 20).Value = .List(.ListIndex)
End If
End With
With ListBox2
If .ListIndex = -1 Then
Range(“B1”).Offset(1).Value = “”
Else
Range(“B1”).Offset(1, 21).Value = .List(.ListIndex)
End If
End With
With ListBox3
If .ListIndex = -1 Then
Range(“B1”).Offset(1).Value = “”
Else
Range(“B1”).Offset(1, 22).Value = .List(.ListIndex)
End If
End With
End Sub
  1. Withステートメント開始でコマンドボタン(CommandButton3)をクリックしたら
  2. リストボックス(ListBox1)の作業
  3. もしリストが選択されていなかったら(ListIndex = -1)
  4. セルB1が空欄ならばB1に
  5. そうでない時は
  6. セルB1の1行下右20列にリストから選択された値を転記する
  7. Ifステートメント終了
  8. Withステートメント終了
  9. リストボックス(ListBox2)の作業
  10. もしリストが選択されていなかったら(ListIndex = -1)
  11. セルB1が空欄ならばB1に
  12. そうでない時は
  13. セルB1の1行下右21列にリストから選択された値を転記する
  14. Ifステートメント終了
  15. Withステートメント終了
  16. リストボックス(ListBox2)の作業
  17. もしリストが選択されていなかったら(ListIndex = -1)
  18. セルB1が空欄ならばB1に
  19. そうでない時は
  20. セルB1の1行下右22列にリストから選択された値を転記する
  21. Ifステートメント終了
  22. Withステートメント終了
  23. 終了

これで和暦と誕生月と誕生日がそれぞれのセルに転記されました

4、転記した和暦・月・日をひとつにまとめよう

ちなみに列20はV、列21はW、列22はXになっています。

このバラバラになっている和暦と誕生月と誕生日をひとつのセルにまとめるのは簡単な数式で、まとめて【YYYY年MM月DD日】とひとつのセルに表示するならば、

=TEXT(V2&W2&X2,”yyyy年m月d日”)

と、記載すればまとまります。

Excel-VBAの知識がまだ浅いので、複雑なVBAコードを探すよりは、エクセル関数をうまく組み合わせながら住所録なども作る事ができますよ。

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

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

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

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

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

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

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