• ベストアンサー

【エクセル】ボタンを使ってリストを削除したい。

以下のことを教えていただけると助かります。 リストボックスにA1:A10までの値を入れています。 リストは複数選択が可能です。 このリストの中の値で、不必要になったものを選択(数は問わず)し、 別途作成したコマンドボタンを押すと、その選択した値を消すことは マクロで可能でしょうか? 結果的にA1:A10までの中の、任意のセルの値を消したいです。 ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

rasyoh
質問者

お礼

2~3日家を空けてたのでお礼が遅れて申し訳ありません。 思い通りの動きをするマクロです。 ありがとうございました。 せっかく教えていただいたので、これを活用しながら勉強したいと思います。 ありがとうございました。助かりました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >リストは複数選択が可能です。 ということは、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

rasyoh
質問者

補足

なるほど。このように記述すればいいのですね。 大変勉強になります。 さて、さっそく教えていただきましたサンプルを試したところ、 Range(strRng).Cells(i + 1, 1).ClearContents この部分でエラーになり、デバックがかかりました。 完璧に私の説明不足だったことをお詫びします。 実はリストボックスの参照先が違うシートにあるのですが、 これがエラーの原因でしょうか? もしそうだとしたら、どのように修正すればいいか教えていただけるとありがたいです。

関連するQ&A