目次
はじめに
ユーザーフォームのリストボックスは、固定のリストを表示するだけでなく、ユーザーの操作に応じて項目を動的に追加したり、選択した項目を削除したり、リスト全体を**空(クリア)**にしたりすることができます。これにより、ショッピングカートのような機能や、タスク管理ツールなどをVBAで作成することが可能になります。
この記事では、リストボックスの項目を操作するための3つの基本的なメソッド、.AddItem(追加)、.RemoveItem(削除)、.Clear(全削除)の使い方を、具体的なサンプルコードと共に解説します。
1. 項目を追加する (.AddItem)
.AddItem メソッドは、リストボックスに新しい項目を1行追加します。
この例では、「追加」ボタンをクリックすると、現在シートで選択されているセル(アクティブセル)の値をリストボックスの末尾に追加します。
サンプルコード
' 「追加」ボタン(AddItemButton)がクリックされたときの処理
Private Sub AddItemButton_Click()
' アクティブセルの値が空白でなければリストに追加
If ActiveCell.Value <> "" Then
Me.TaskListBox.AddItem ActiveCell.Value
End If
End Sub
コードの解説
Me.TaskListBox.AddItem ActiveCell.Value:TaskListBoxというリストボックスに、ActiveCell.Value(アクティブセルの値)を新しい項目として追加しています。項目はリストの最後に追加されます。
2. 選択項目を削除する (.RemoveItem)
.RemoveItem メソッドは、指定したインデックス番号の行をリストボックスから削除します。
この例では、「削除」ボタンをクリックすると、リストボックスで現在選択されている項目を削除します。
サンプルコード
VB.Net
' 「削除」ボタン(RemoveItemButton)がクリックされたときの処理
Private Sub RemoveItemButton_Click()
With Me.TaskListBox
' .ListIndex で選択行のインデックスを取得し、項目が選択されているか確認
If .ListIndex > -1 Then
' .RemoveItem にインデックス番号を渡して、その行を削除
.RemoveItem .ListIndex
Else
MsgBox "削除する項目を選択してください。", vbExclamation
End If
End With
End Sub
コードの解説
If .ListIndex > -1 Then:.ListIndexは選択されている行のインデックス(0始まり)を返します。何も選択されていない場合は-1を返すため、このIf文で項目が選択されていることを確認しています。.RemoveItem .ListIndex:.RemoveItemメソッドに、引数として削除したい行のインデックス番号を渡します。ここでは、.ListIndexで取得した選択行のインデックスをそのまま渡すことで、選択項目を削除しています。
3. 全ての項目をクリアする (.Clear)
.Clear メソッドは、リストボックス内の全ての項目を一括で削除し、リストを空にします。
サンプルコード
' 「全クリア」ボタン(ClearAllButton)がクリックされたときの処理
Private Sub ClearAllButton_Click()
Me.TaskListBox.Clear
End Sub
コードの解説
Me.TaskListBox.Clear:TaskListBoxの内容を全てクリアします。引数は不要で、非常にシンプルです。
まとめ
今回は、リストボックスの項目を動的に操作するための3つの基本メソッドを解説しました。
.AddItem: 項目を1つ追加する。.RemoveItem: 選択した項目を1つ削除する。.Clear: 全ての項目を削除する。
これらのメソッドを使いこなすことで、ユーザーの操作に応じて内容が変化する、よりインタラクティブで実用的なユーザーフォームを作成することができます。
