- ベストアンサー
【エクセル】ボタンを使ってリストを削除したい。
以下のことを教えていただけると助かります。 リストボックスにA1:A10までの値を入れています。 リストは複数選択が可能です。 このリストの中の値で、不必要になったものを選択(数は問わず)し、 別途作成したコマンドボタンを押すと、その選択した値を消すことは マクロで可能でしょうか? 結果的にA1:A10までの中の、任意のセルの値を消したいです。 ご教授よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >Range(strRng).Cells(i + 1, 1).ClearContents >この部分でエラーになり、デバックがかかりました。 確かに、例えば、Sheet2!A1:A10 の場合は、エラーが掛かります。 通常、同じシートに、ListFillRange を置くか、AddItem で、ListBox に値を表示するか、どちらかです。 一応、コードは以下のようにはなるけれど、その元のデータのシートをオープンにするまでは、ListBox に値は残ります。 Private Sub CommandButton1_Click() Dim myListrng As String Dim strRng As String Dim ar() As Boolean Dim shName As String myListrng = ListBox1.ListFillRange shName = Mid$(myListrng, 1, InStr(myListrng, "!") - 1) strRng = Mid$(myListrng, InStr(myListrng, "!") + 1) ReDim ar(0 To ListBox1.ListCount) For i = 0 To ListBox1.ListCount - 1 ar(i) = ListBox1.Selected(i) Next Application.ScreenUpdating = False If MsgBox("選択したものを消去してよいですか?", vbOKCancel) = vbOK Then For i = 0 To ListBox1.ListCount - 1 If ar(i) Then Worksheets(shName).Range(strRng).Cells(i + 1, 1).ClearContents End If Next End If Worksheets(shName).Select '←これを入れないと、更新されません。 Application.ScreenUpdating = True End Sub
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >リストは複数選択が可能です。 ということは、MultiSelect にしてある、ということでしょうか? コントロールツールのListBox を想定しています。 Private Sub CommandButton1_Click() Dim strRng As String Dim ar() As Boolean strRng = ListBox1.ListFillRange ReDim ar(0 To ListBox1.ListCount) For i = 0 To ListBox1.ListCount - 1 ar(i) = ListBox1.Selected(i) Next Application.ScreenUpdating = False If MsgBox("選択したものを消去してよいですか?", vbOKCancel) = vbOK Then For i = 0 To ListBox1.ListCount - 1 If ar(i) Then Range(strRng).Cells(i + 1, 1).ClearContents End If Next End If Application.ScreenUpdating = True End Sub
補足
なるほど。このように記述すればいいのですね。 大変勉強になります。 さて、さっそく教えていただきましたサンプルを試したところ、 Range(strRng).Cells(i + 1, 1).ClearContents この部分でエラーになり、デバックがかかりました。 完璧に私の説明不足だったことをお詫びします。 実はリストボックスの参照先が違うシートにあるのですが、 これがエラーの原因でしょうか? もしそうだとしたら、どのように修正すればいいか教えていただけるとありがたいです。
お礼
2~3日家を空けてたのでお礼が遅れて申し訳ありません。 思い通りの動きをするマクロです。 ありがとうございました。 せっかく教えていただいたので、これを活用しながら勉強したいと思います。 ありがとうございました。助かりました。