リストボックスの値やリスト(項目)を選択して削除する方法
リストボックスを使っていると値やリスト(項目)が不要になり、削除したいと思ったことありませんか?
せっかくオリジナル入力フォームを使ってエクセルの作業を自動化しているのだから、ワークシートのセルに直接探して削除するのではなく、フォーム上で行えばとてもスムーズですよ。
RemoveItemメソッド
リストを選択状態にして削除
リストボックスに表示された値やリスト(項目)を削除するには、コマンドボタンにリストボックスで選択状態にした値やリスト(項目)を削除するようにVBAコードを書き込みます。
これで選択状態にしたリストが表示中のユーザーフォームのリストボックスから削除できましたが、実はこれは一時的なものなのです。
なぜ一時的なものかというと、リストボックスに表示している値やリスト(項目)は、ユーザーフォームのInitializeイベントによりユーザーフォームが表示されるたびに設定されている値やリスト(項目)が表示されるようになっています。
Initializeについてはここでは省略しますので下記をご覧くださいませ。
という事で、リスト自体を完全削除するにはRemoveItemメソッドでは役に立ちません。
実行時エラーになって削除できない
RemoveItemメソッドがリスト完全削除するには役に立たないと書きましたが、リストボックスへリスト登録の方法により、一時的な削除もできず「実行時エラー」「予期せぬエラーが発生しました」なんてエラー表示になる事があります。
エラーになる理由は、RowSourceプロパティを使用してリストボックスに反映させるリストがセルとリンク(連動)しているからです。
リストボックスに反映させる値やリスト(項目)がセルと連動させられないなら、非常に不便なのでやっぱり、RemoveItemメソッドでは役に立ちません。
ちなみに同じくClearメソッドも全く同じ扱いになります。
Clearメソッド
RemoveItemメソッドを使うと選択状態になった値やリスト(項目)に対して、リストボックス上から削除ができますが、表示されている全てのリストを削除するには、Clearメソッドを使用します。
これでリストが表示中のユーザーフォームのリストボックスから全て削除できましたが、先ほどのRemoveItemメソッドと同じく、これも一時的なものなのです。
Clearメソッドが表示中のリスト全て削除で、RemoveItemメソッドが選択状態のリストだけの違いで、エラー表示なども含めて扱いは一緒だと思ってください。
VBAコード合わせ技で削除ボタン作成
リストボックスを使うならば、値やリスト(項目)の新規登録・追加・削除の3つができて当然です。
そこで、リスト選択状態で削除ボタンを押したら該当する値のセルを空欄にすることにより、リストを完全削除できるようになります。
もちろん、値やリスト(項目)が追加されると自動的にセルの範囲(RowSource)が書き換えられるようにしているので、RemoveItemメソッドは使っていません。
そして単独でリスト削除できるVBAコードもありませんので、組み合わせて削除ボタンを作ります。
- リストボックスのリスト選択状態を取得する
- 入力済みセルの数を数える(リストの数を数える)
- 削除により空欄になったセルを詰める
ざっくりこの3つの組み合わせでリストボックスのリスト完全消去ができますが、「リストボックスに値やリストを登録・追加・削除フォームを作成」と全く同じ内容になるので、下記をご覧くださいませ。