リストボックスの値やリスト(項目)を選択して削除する方法

リスト全消去 リストボックス

リストボックスを使っていると値やリスト(項目)が不要になり、削除したいと思ったことありませんか?

せっかくオリジナル入力フォームを使ってエクセルの作業を自動化しているのだから、ワークシートのセルに直接探して削除するのではなく、フォーム上で行えばとてもスムーズですよ。

スポンサーリンク

RemoveItemメソッド

リストを選択状態にして削除

リストボックスに表示された値やリスト(項目)を削除するには、コマンドボタンにリストボックスで選択状態にした値やリスト(項目)を削除するようにVBAコードを書き込みます。

リスト削除

Private Sub CommandButton2_Click()
ListBox1.RemoveItem ListBox1.ListIndex
End Sub

VBA解説
  1. コマンドボタン2がクリックされたら
  2. リストボックス1の選択状態のリストを削除する
  3. マクロ記録終了

これで選択状態にしたリストが表示中のユーザーフォームのリストボックスから削除できましたが、実はこれは一時的なものなのです。

リスト削除

なぜ一時的なものかというと、リストボックスに表示している値やリスト(項目)は、ユーザーフォームのInitializeイベントによりユーザーフォームが表示されるたびに設定されている値やリスト(項目)が表示されるようになっています。

Initializeについてはここでは省略しますので下記をご覧くださいませ。

という事で、リスト自体を完全削除するにはRemoveItemメソッドでは役に立ちません

実行時エラーになって削除できない

RemoveItemメソッドがリスト完全削除するには役に立たないと書きましたが、リストボックスへリスト登録の方法により、一時的な削除もできず「実行時エラー」「予期せぬエラーが発生しました」なんてエラー表示になる事があります。

エラーになる理由は、RowSourceプロパティを使用してリストボックスに反映させるリストがセルとリンク(連動)しているからです。

リストボックスに反映させる値やリスト(項目)がセルと連動させられないなら、非常に不便なのでやっぱり、RemoveItemメソッドでは役に立ちません

ちなみに同じくClearメソッドも全く同じ扱いになります

スポンサーリンク

Clearメソッド

RemoveItemメソッドを使うと選択状態になった値やリスト(項目)に対して、リストボックス上から削除ができますが、表示されている全てのリストを削除するには、Clearメソッドを使用します。

リスト全削除

Private Sub CommandButton2_Click()
ListBox1.Clear
End Sub

リスト全消去

これでリストが表示中のユーザーフォームのリストボックスから全て削除できましたが、先ほどのRemoveItemメソッドと同じく、これも一時的なものなのです。

Clearメソッドが表示中のリスト全て削除で、RemoveItemメソッドが選択状態のリストだけの違いで、エラー表示なども含めて扱いは一緒だと思ってください。

スポンサーリンク

VBAコード合わせ技で削除ボタン作成

リストボックスを使うならば、値やリスト(項目)の新規登録・追加・削除の3つができて当然です。

そこで、リスト選択状態で削除ボタンを押したら該当する値のセルを空欄にすることにより、リストを完全削除できるようになります。

もちろん、値やリスト(項目)が追加されると自動的にセルの範囲(RowSource)が書き換えられるようにしているので、RemoveItemメソッドは使っていません

そして単独でリスト削除できるVBAコードもありませんので、組み合わせて削除ボタンを作ります。

  1. リストボックスのリスト選択状態を取得する
  2. 入力済みセルの数を数える(リストの数を数える)
  3. 削除により空欄になったセルを詰める

ざっくりこの3つの組み合わせでリストボックスのリスト完全消去ができますが、「リストボックスに値やリストを登録・追加・削除フォームを作成」と全く同じ内容になるので、下記をご覧くださいませ。

リストボックス関連