エクセルマクロVBA

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

投稿日:

リストボックスは以下の赤枠内のような一覧が表示され、クリックによっていずれか一つまたは複数のものを選択できるコントロールです。


リストボックスを配置するには「ツールボックス」で「リストボックス」のボタンを

クリックしてから、フォーム上でリストボックスを描くようにドラッグ操作を行います。


 

リストボックスに名前を設定するには「オブジェクト名」の部分で入力します。

ここでは「lst分類」と設定しています。


 

次に「ツールボックス」内の「コマンドボタン」をクリックしてボタンを配置します。

 

 

そしてボタン名に「cmdOK」と入力します。

 

 

 

そしてボタンの文字列は「OK」と入力しておきます。

 

 

次にフォームが表示されたときにリストボックスに選択肢が表示されるように設定を行います。

フォームをクリックして選択した状態で、左側の「コードの表示」をクリックします。

 

次のVBEの画面で「UserForm」が表示されていることを確認し、

 

右側の小さな矢印をクリックして一覧から「Initialize」をクリックして選択します。

するとコードの部分に「Private Sub UserForm_Initialize()」と表示されます。

このInitialize()というイベントはフォームが開く前に実行されるイベントになります。

 

この部分にフォームが開く前に実行させたい処理プログラムを記述することができますので、ここでは先ほど設置したリストボックス内に選択肢の一覧を表示させてみます。

 

 

次に以下のようにコードを記述します。

 

ここではWith~End Withステートメントを使用してリストボックス「lst分類」に複数の処理を実行させています。

 

AddItemメソッドを使用するとリストボックスに値を追加することができます。

ここでは「電子機器」から「精密機器」までの5つの値をリストボックスに追加しています。

 

このように記述することでフォームが開くとリストボックス「lst分類」に設定した値を表示させることができます。

次に先ほど設置したボタンをクリックするとリストボックスで選択されている値が

メッセージボックスで表示されるように設定します。

 

先ほど設置したボタンをダブルクリックしてVBEを表示します。

 

次にVBEの画面で左側に「cmdOK」、右側に「Click」となっていることを確認し

Private Sub cmdOK_Click()内に以下のように記述します。

 

はじめにDim i As Integer の部分で 整数型の「i」という変数を宣言しています。

 

これは次に使用するFor文で使用する変数になります。

 

次にFor文を使ってリストボックスの値を1行目から順番にチェックしてゆきます。

そしてある行が選択されている場合はその値をメッセージボックスで表示させます。

 

lst分類.ListCount ではリストボックス「lst分類」に対してListCountプロパティを

参照することによってリストボックス内にいくつ値が入っているかを調べることができます。

■ListCountプロパティ:リストボックス内の項目数を返す

[書式]

リストボックス.ListCount

 

ここではリストボックス内には5つの値が入っているので「lst分類.ListCount」は5になります。

 

If lst分類.Selected(i) = True Then

 

リストボックス「lst分類」に対してSelectedプロパティを指定することにより

リストボックスが選択されている状態かを調べることができます。

 

Selectedプロパティ

ある項目が選択されているかどうかを返し、

選択されている場合はTrue、されていない場合はFalseを返します。

 

[書式]

リストボックス. Selected(項目の番号)

項目の番号は0から始まりますので、番号0はリストボックスの1行目、

番号1は→2行目となります。

 

[]

リストボックス. Selected0 1番目の項目が選択されているかどうかを返す。

 

ここではFor文と組み合わせることにより、リストボックスの1行目の値から最終行の値まで順番に調べていきます。

 

For i = 0 To lst分類.ListCount – 1 と指定していますが、

リストボックスの値は5つあるので、lst分類.ListCount5になり、

変数iの値が0から4lst分類.ListCount5から1をマイナス)になるまで

繰り返し処理が実行されます。

 

For i = 0 To lst分類.ListCount – 1

 

If lst分類.Selected(i) = True Then

 

 

変数iの値が0のときは、lst分類.Selected(0)1つ目の値、

変数iの値が1のときは、lst分類.Selected(1)2つ目の値というかたちで

順番に値を調べてゆき、

もしリストボックスの値がチェックされているとき、lst分類.Selected(i) = True

となるときに、メッセージボックスでその値を表示します。

 

If lst分類.Selected(i) = True Then

 

MsgBox lst分類.List(i)

 

End If

 

lst分類.List(i)

 

Listプロパティを使用すると、リストボックスの値を取得することができます。

 

[書式]

リストボックス. List(項目の番号)

 

項目の番号は0から始まりますので、項目の番号が0の場合はリストボックスの1行目

項目の番号が1の場合は2行目の値を取得することができます。

 

[]

リストボックス. List1 2番目の項目の内容を返す。

 

MsgBox lst分類.List(i) ではリストボックスにチェックが入っている場合に

そのときのiの値を項目の番号としてlst分類.List(i)で値を取得して

メッセージボックスで表示します。

そして実行ボタンをクリックしてフォームを実行すると、リストボックスに値が表示され、

その中から値を選択して「OK」ボタンをクリックすると

その値がメッセージボックスで表示されます。

 


 





動画で楽にパソコンが身につく方法はこちら>>

-エクセルマクロVBA

Copyright© エクセルVBA使い方入門 , 2020 All Rights Reserved Powered by STINGER.