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

テキストボックスコントロールプロパティ リストボックス

ユーザーフォーム使っていてちょっとめんどくさいと思った経験ありませんか?

決まった数字や文字の入力ならば、簡単にしませんか?

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

リストから選ぶようにすれば簡単・便利・早いですよ

スポンサーリンク

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

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

この中にリストボックスというパーツがあります。

エクセル2016のツールボックス

エクセル2016のツールボックス

このリストボックスはテキストボックスとは違い、自由に文字を入れることはできません。

その代わり、リスト形式で文字や数字などのあらかじめ決めておいたデータの中から選ぶだけになっているので入力の手間がちょっとは省略できますね。

リストボックスの活用として、エクセル2007の時は「カレンダーコントロール」というパーツがあったので、生年月日などに使っていたのですが、2010以降廃止されました。

そこで、和暦・年・月・日をリストから選べば選択できるようにします。

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

でもやっぱり使い慣れたものがなくなると不便なので作っちゃいました!

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

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

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

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

スポンサーリンク


 

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

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

listboxプロパティ

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

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

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

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

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

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

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

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

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

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

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

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

リストボックスからセルへ転記

Private Sub CommandButton1_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

VBA解説
  1. Withステートメント開始でコマンドボタン(CommandButton1)をクリックしたら
  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. マクロ終了

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

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

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

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

年月日をまとめる

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

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

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

タイトルとURLをコピーしました