ListBoxのClickイベント
Private Sub リストボックス名_Click()
リストボックスで、任意のデータが選択されたときに処理を自動実行するには、ListBoxのClickイベントにコードを記述します。ユーザーフォームのデザイン画面でリストボックスをダブルクリックすると、「Private Sub ListBox1_Click()」のようにマクロ名が自動入力され、リストボックスのデータを選択したときに実行されるイベントマクロを作成できます。
次のサンプルコードでは、リストボックスのデータをクリックして選択すると、リストの元データ(A列)の右隣(B列)にあるデータを取得してメッセージボックスに表示します。何番目のデータが選択されたのかは、ListIndexプロパティ(左ページ下)でわかります。
リストのデータを選択すると、対応するB列のデータを表示する
Private Sub ListBox1_Click()
MsgBox Cells(ListBox1.ListIndex + 1, 2)
End Sub
実行結果




ListBoxオブジェクトのListCountプロパティ
リストボックス.ListCount
リストボックスに登録されているデータの個数は、ListBoxオブジェクトのListCountプロパティで取得できます。そのうちの何番目のデータを選択しているかは、ListIndexプロパティでわかります。
ただし、ListIndexが返す値は、先頭が0から始まっている点に注意してください。上から何個目のデータを選択しているかを表示させる場合は、1を加えます。
リストボックス内のデータの個数と、選択したデータの位置を表示
Private Sub CommandButton1_Click()
Dim c As Long, n As Long
c = ListBox1.ListCount
n = ListBox1.ListIndex + 1
MsgBox “項目数は” & c & “個です。現在” & vbCrLf & _
n & “個目を選択しています。”
End Sub
実行結果




ListBoxオブジェクトのTextプロパティ
リストボックス.Text
リストボックスで選択されている文字列は、ListBoxオブジェクトのTextプロパティで取得できます。ListBoxオブジェクトのValueプロパティを利用しても、選択されている文字列を取得できますが、注意が必要です。リストボックス内で何もデータが選択されていないとき、TextBoxプロパティは空欄を返します。この場合、Valueプロパティはエラーになります。
次のサンプルコードでは、「CommandButton1」という名前のボタン(ボタンの表示は「選択」)をクリックすると、リストボックスで選択していた文字列を取得して、メッセージボックスに表示します。
サンプル●ボタンをクリックすると、リストボックスで選択していた文字列を表示する
Private Sub CommandButton1_Click()
MsgBox ListBox1.Text
End Sub
実行結果




ListBoxオブジェクトのListプロパティ
リストボックス.List
リストボックスにデータを登録するには、いくつかの方法があります。登録したいデータがセルに入力されている場合は、ListBoxオブジェクトのListプロパティにセル範囲を指定する方法が簡単です。このとき、Valueプロパティは省略できない点に注意してください。
下のサンプルコードは、ユーザーフォームの起動時に、A1~A5セルのデータをリストボックス内に登録するマクロの例です。フォームを初期化するイベントマクロ「UserForm_
Initialize」に、コードを記述しました。 なお、セルに入力されていない文字列を登録するときは、ListBoxのAddItemメソッドを使います。
A1 ~ A5セルの内容をリストボックスに表示する
Private Sub UserForm_Initialize()
ListBox1.List = Range(“A1:A5”).Value
End Sub
実行結果




SelLengthプロパティ
テキストボックス.SelLength
テキストボックスに入力された文字列を選択状態にするには、SelLengthプロパティに、選択する文字数を指定します。すべての文字列を選択するには、開始位置を示すSelStartプロパティに0を指定し、SelLengthプロパティに全体の文字数を指定します。全体の文字数は、Len関数の引数にTextプロパティを指定して数えます。
SelLengthプロパティを設定するときは、SetFocusメソッドでテキストボックスにフォーカスを移動させておきます。
ボタンをクリックしたとき、テキストボックスの文字列を選択状態にする
Private Sub CommandButton1_Click()
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub
実行結果





Changeイベント
Private Sub テキストボックス名_Change()
テキストボックス内の文字列を変更したときに処理を自動実行するには、テキストボックスのChangeイベントにコードを記述します。ユーザーフォームのデザイン画面でテキストボックスをダブルクリックすると、「Private Sub TextBox1_Change()」のようにマクロ名が入力され、テキストボックスの内容を変更したときに実行されるイベントマクロを作成することができます。
次のサンプルコードでは、「Label4」という名前のラベルに、TextBox1への入力内容が自動的に反映されます。
テキストボックスへの入力内容を、即座にラベルに反映
Private Sub TextBox1_Change()
Label4.Caption = TextBox1.Text
End Sub
実行結果




TextBoxオブジェクトのTextプロパティ
テキストボックス.Text
フォームに入力欄を設けるには「テキストボックス」を使います。テキストボックスにマクロで文字列を入力するには、TextBoxオブジェクトのTextプロパティに文字列を設定しま
す。TextプロパティはTextBoxオブジェクトの既定のプロパティなので、Textプロパティを省略して「TextBox1 = “サンプル”」のように書くこともできます。
次のサンプルコードでは、「CommandButton1」という名前のボタン(ボタンの表示は「テキストボックス変更」)をクリックすると、フォーム上のテキストボックスに「日経ソフトウエア」という文字列を入力します。
ボタンをクリックすると、テキストボックスに文字列を入力
Private Sub CommandButton1_Click()
TextBox1.Text = “JAM&MOMO”
End Sub
実行結果




ラベルに文字列を表示するには?
ラベル.Caption
フォームに文字列を配置するには「ラベル」を用います。ラベルに任意の文字列を表示するには、LabelオブジェクトのCaptionプロパティに文字列を設定します。 Captionプロパティ
はLabelオブジェクトの既定のプロパティなので、Captionプロパティを省略して「Label1 = “サンプル”」のように書くこともできます。
次のサンプルコードでは、「CommandButton1」という名前のボタン(ボタンの表示は「ラベル変更」)をクリックすると、フォーム上のラベルを変更します。
サンプル●ボタンをクリックすると、ラベルの表示が変わる
Private Sub CommandButton1_Click()
Label1.Caption = “OKボタンが押下されました”
End Sub
実行結果



Captionプロパティ
ユーザーフォーム.Caption
ユーザーフォームのタイトルバーに任意の文字列を表示するには、ユーザーフォームのCaptionプロパティに文字列を設定します。Visual Basic Editor(VBE)のフォーム作成画面で、プロパティウィンドウの「Caption」欄に入力しても設定可能ですが、Captionプロパティを使ったコードを書けば、マクロの中で動的に変更することができます。
ユーザーフォームを表示すると同時にタイトルバーを設定するには、ユーザーフォームの起動時に実行される、「UserForm_Initialize」というイベントマクロに記述します。
フォームを初期化するためのマクロです。このマクロは、VBEの画面左側(プロジェクトエクスプローラー)でユーザーフォームのアイコンを右クリックして「コードの表示」を選択。開いたコード画面に、「Private Sub UserForm_Initialize()」という名前でマクロを記述します。フォーム自身を表すMeに対してCaptionを指定すればOKです。
ユーザーフォームを初期化してタイトルバーを設定
Private Sub UserForm_Initialize()
Me.Caption = “JAM&MOMO”
End Sub
実行結果


Unloadステートメント
ユーザーフォーム.Hide
Unloadステートメントでユーザーフォームを閉じると、コントロールなどがすべて初期化されます。コントロールの値や状態を保持したまま、ユーザーフォームを一時的に隠すには、Unloadではなく、Hideメソッドでユーザーフォームを非表示にします。非表示にしたユーザーフォームは、Showメソッドで再表示できます。
ユーザーフォームを一時的に非表示にした後、再表示する
Private Sub CommandButton1_Click()
Me.Hide
MsgBox “ユーザーフォームを非表示にしました。”
Me.Show
End Sub
図●実行結果。中央の図のダイアログはユーザーフォームではなくMsgBox関数による表示。終了するには「×」ボタンを押す




