リストボックスと同じセルデータを削除する方法

このQ&Aのポイント
  • Office2010 Windows7環境で、ユーザーフォームのリストボックスを使用して、選択した項目と同じ項目が含まれるセルデータを削除する方法についてご質問です。
  • 具体的には、摘要リストで選択した項目と同じ項目があるセルを、N3から最終行までの範囲で探し出し、削除する処理の実装方法がわかりません。
  • さらに、削除するセルの1つ左側(M列)と2つ左側(L列)のセルのデータ、および選択した項目も一緒に削除する方法についても教えていただきたいです。
回答を見る
  • ベストアンサー

リストボックスと同じセルデーターを削除する

3時間ほど奮闘していますが、思うようにできません。 よろしくお願いします。(Office2010 Windows7) ユーザーフォームのリストボックス(摘要リスト)で、選んだ項目と 同じ項目があるセルを、N3からラスト行の中から探し出して、削除する。 また、その1つ左側(M列)と、2つ左側(L列)のセルデーター及び リストボックス(摘要リスト)で、選んだ項目も削除する。 Dim i As Long With ActiveWorkbook.Sheets("勘定科目") 摘要リスト.Clear For i = 3 To Range("N65536").End(xlUp).Row If .Range("N" & i).Value = 摘要リスト.Value Then 摘要リスト.List(.ListIndex, 0) = "" ActiveCell.Offset(0, 0).Value = "" ActiveCell.Offset(0, -1).Value = "" ActiveCell.Offset(0, -2).Value = "" End If Next End With と、したのですが、うまく作動しません。

  • 1211M
  • お礼率54% (90/165)

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

  • ベストアンサー
  • kichi8000
  • ベストアンサー率41% (658/1581)
回答No.1

ループの中で比較元を消してしまっています。 ボックスを消す前に比較元”摘要リスト.Value”を取得し、その値を再利用しないといけません。 ActiveCell.Offset 指定のセルがアクティブになっていないままの操作では動作不安定になります。 Range(r).Offset などでアクティブにしなくてもできます。 摘要リスト.Clear リスト項目を全削除していいんでしょうか。 摘要リスト.List(.ListIndex, 0) 全削除の後でリストの1番目の項目をなぜ空に? a = 摘要リスト.ListIndex 摘要リスト.RemoveItem(a) リストを選択していない時の処理は? このままだと""も検索対象になりませんか。 If ListBox1.ListIndex = -1 Then Exit Sub Dim i As Long Dim r As String Dim k As Variant Dim s As Boolean = False With ActiveWorkbook.Sheets("勘定科目") k = 摘要リスト.Value 摘要リスト.Clear For i = 3 To Range("N65536").End(xlUp).Row r = "N" & i If .Range(r).Value = k Then s = True Range(r).Offset(0, 0).Value = "" Range(r).Offset(0, -1).Value = "" Range(r).Offset(0, -2).Value = "" End If Next If s = True then 摘要リスト.List(.ListIndex, 0) = "" End if End With ここまで書いて、リストボックスをどうしたいのかわからなくなってきました。

1211M
質問者

お礼

kichi8000 さん 質問の仕方が下手にもかかわらず、ありがとうございました。 解決しました。 今後ともよろしくお願いします。

関連するQ&A

  • リストボックスから複数行を選択し、その複数のデータをセルに入力したい

    Excel2003でマクロをつくっています。シートのB列を右クリックすると、リストボックスが表示され 任意1行を選択するとシートのB列、C列、D列のセルにデーターが入力されます。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ’シートが保護されていたら保護を解除 If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1) ActiveCell.Offset(0, 2).Value = ListBox2.List(ListBox2.ListIndex, 2) ActiveSheet.Protect End If End With Unload UserForm3 End Sub このリストボックスから複数の行を選択し、シートのB列、C列、D列のセルにデーターを入力したいのですが、Multiselectプロパティを変更しても、一行のみしか入力できません。 上のコードをどうかえたらよろしいでしょうか。

  • リストボックスで選択した一行を一度にセルに入力したい

    Xcel2003でマクロ作成中です。以下のコードで、リストボックスで一行を選択しました。この選択した一行のデータのうち2個のデータをC列とD列に入力することができました。が、E列にもデータを入力したいのです。が色いろやってみましたができません。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.list(ListBox2.ListIndex, 1) End If End With Unload UserForm3 End Sub 上のコードにどう追加記入したらよろしいでしょうか?

  • リストボックスについて

    リストボックスからデータを転記したいのですが、 実行時エラー"1004"が出てしまい、どうしてもうまくいきません。 どなたか原因を教えてください。 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Long With Worksheets("sheet2") i = .Range("F47").End(xlUp).Row + 1 .Range(i, 6).Value = ListBox1.List(ListBox1.ListIndex, 0) .Range(i, 12).Value = ListBox1.List(ListBox1.ListIndex, 1) .Range(i, 26).Value = ListBox1.List(ListBox1.ListIndex, 2) .Range(i, 28).Value = ListBox1.List(ListBox1.ListIndex, 3) .Range(i, 34).Value = ListBox1.List(ListBox1.ListIndex, 4) .Range(i, 37).Value = ListBox1.List(ListBox1.ListIndex, 5) End With Unload Me End Sub

  • 画面のちらつきを無くす

    よろしくお願いします。 1:シート上のセルからユーザーフォーム(フォームあ)を開く。 2:ユーザーフォームには、リストボックスが3つあります。   (リスト1、リスト2、リスト3)  リスト1から項目を選択、次にリスト2を選択した時と、リスト3を  選択したときに、画面がちらつきます。 このチラつきがないように、出来ないでしょうか。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Target.Row > 4 And Target.Row < 233 And Target.Column > 5 And Target.Column < 7 Then   フォームあ.Show vbModeless   Else    Unload フォームあ   End If End Sub Private Sub リスト1_Click()  Application.ScreenUpdating = False   With リスト1ActiveCell.Offset(0, 0).Activate    ActiveCell.Value = .List(.ListIndex, 0)    ActiveCell.Offset(0, 0).Value = .List(.ListIndex, 0)     ActiveCell.Offset(0, 0).Activate   End With  Application.ScreenUpdating = True End Sub Private Sub リスト2_Click()  Application.ScreenUpdating = False   With リスト2    ActiveCell.Offset(0, 3).Activate    ActiveCell.Value = .List(.ListIndex, 0)    ActiveCell.Offset(0, 0).Value = .List(.ListIndex, 0)     ActiveCell.Offset(0, -3).Activate   End With  Application.ScreenUpdating = True End Sub Private Sub リスト3_Click()  Application.ScreenUpdating = False   With リスト3    ActiveCell.Offset(0, 3).Activate    ActiveCell.Offset(1, 0).Activate    ActiveCell.Value = .List(.ListIndex, 0)    ActiveCell.Offset(0, 0).Value = .List(.ListIndex, 0)     ActiveCell.Offset(-1, 0).Activate     ActiveCell.Offset(0, -3).Activate   End With  Application.ScreenUpdating = True End Sub

  • VBA リストボックスの値をセルに転記

    よろしくお願いします。 したいことは、 ユーザーフォームのリストボックスで複数の値を選んで複数セルに転記する。 ActiveCell.offset(10, 5) ⇐ リストボックスで選んだ1つ目 ActiveCell.offset(11, 5) ⇐ リストボックスで選んだ2つ目 ActiveCell.offset(12, 5) ⇐ リストボックスで選んだ3つ目 下の構文では1つしか転記できません。 Dim n As Integer, s As String For n = 0 To ListBox3.ListCount - 1 If ListBox3.Selected(n) Then s = s & ListBox3.List(n) & vbCrLf ActiveCell.offset(10, 5).Value = s End If Next

  • オプションボタンとリストボックスの連動

    下記コードを作りましたが、全く反応がありません。 どこが悪いのか、指摘いただけませんでしょうか? よろしくお願いします。 ・オプションボタン1を選択=リストシートのB列をリストボックスへ表示 ・オプションボタン2を選択=リストシートのC列をリストボックスへ表示 ・リストボックスから一項目を選択、値を入力シートへ入力 Private Sub UserForm2_Initialize() If OptionButton1.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!B3:B" & lastRow End With End If If OptionButton2.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!C3:C" & lastRow End With End If End Sub Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Worksheets("入力!").ActiveCell.Value = ListBox1.Value End Sub 以上

  • 連続印刷処理前に確認しOKしてから再開するマクロ

    連続印刷マクロを作成したのですが、印刷の手前で確認を入れたいので、その処理を教えてください。 エクセルの表は項目が14列あり、999行です。 印刷は、2種類のシートに分け印刷できるようになっているのですが、確認は1度だけを考えています。 Sub 印刷_Click() Worksheets("集計・印刷").Activate '作業シート名 Range("A2").Select '番号(001~999)をこの次の"A3"セルより転記される。 Do '↓ ※1度の作業で15個の番号を最大とします。 'アクティブセルを1つ下に移動 ActiveCell.Offset(1, 0).Select '1度の作業で15枚印刷する。 '空欄であれば、プログラムを終了する 'Trim関数は前後のスペースを消去する If Trim(ActiveCell.Value) = "" Then Exit Do End If '非表示セルは印刷の対象としない If ActiveCell.EntireRow.Hidden = False Then If ActiveCell.Offset(, 2).Value = "単品" Then 'C列で単品の判断をする。 With Worksheets("A") 'Aシートへ記入 .Range("C3").Value = ActiveCell.Offset(0, 0).Value '番号 .Range("L24").Value = ActiveCell.Offset(0, 2).Value '種類 .Range("F3").Value = ActiveCell.Offset(0, 3).Value '型式 .Range("C23").Value = ActiveCell.Offset(0, 4).Value '測定日 .Range("C24").Value = ActiveCell.Offset(0, 5).Value '製造日 .Range("C9").Value = ActiveCell.Offset(0, 6).Value 'ライン .Range("C10").Value = ActiveCell.Offset(0, 7).Value '担当 .Range("C7").Value = ActiveCell.Offset(0, 9).Value '外観 .Range("C8").Value = ActiveCell.Offset(0, 10).Value '気密 '繰返し処理をしているので一度に印刷される。 .PrintOut End With ElseIf ActiveCell.Offset(, 2).Value = "複数品" Then'C列で複数品の判断をする。 With Worksheets("B") 'Bシートへ記入 .Range("C3").Value = ActiveCell.Offset(0, 0).Value '番号 .Range("L24").Value = ActiveCell.Offset(0, 2).Value '種類 .Range("F3").Value = ActiveCell.Offset(0, 3).Value '型式 .Range("C23").Value = ActiveCell.Offset(0, 4).Value '測定日 .Range("C24").Value = ActiveCell.Offset(0, 5).Value '製造日 .Range("C9").Value = ActiveCell.Offset(0, 6).Value 'ライン .Range("C10").Value = ActiveCell.Offset(0, 7).Value '担当 .Range("C7").Value = ActiveCell.Offset(0, 9).Value '外観 .Range("C8").Value = ActiveCell.Offset(0, 10).Value '気密 .Range("C11").Value = ActiveCell.Offset(0, 23).Value '(1)min .Range("C12").Value = ActiveCell.Offset(0, 24).Value '(1)max .Range("F7").Value = ActiveCell.Offset(0, 25).Value '(2)min .Range("F8").Value = ActiveCell.Offset(0, 26).Value '(2)max '繰返し処理をしているので一度に印刷される。 .PrintOut End With End If End If Loop End Sub

  • リストボックスの内容を検索したいが...

    エクセル2019を使っています。 添付画像のようにユーザーフォームにテキストボックスとリストボックスを作り、テキストボックスに入力した文字でリストボックスの内容を検索しようとコードを作成しました。 Private Sub TextBox1_Change() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row .Range("A1").AutoFilter 1, "*" & TextBox1.Value & "*" If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then Set rng = .Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible) Else Me.ListBox1.Clear Exit Sub End If End With Me.ListBox1.Clear With Me.ListBox1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With End Sub Private Sub UserForm_Initialize() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row Set rng = .Range("A2:A" & LastRow) End With With Me.ListBox1 .ColumnCount = 1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With ListBox1.ListIndex = 0 End Sub とりあえず検索はできるのですが、使用されていない文字や記号を入力したあとにバックスペースキーで入力した文字や記号を削除するとリストボックスの内容が意図した内容で表示されません。 どこを修正したらいいでしょうか。

  • ExcelVBA・リスト中の1行のみ例外処理したい

    VBA初心者です。 エクセル2007で、sheet1にある商品名(A列)・金額(B列)・個数(C列)・発注日(D列)のリスト(AからD列の50行ほどの範囲。行は増える可能性あり)を商品名をキーにあいうえお順で並べ替え、 sheet2のフォーマットの各セル(A6,D6,G9,J9)へsheet1の商品名・金額等を差込→印刷の繰り返しを行うマクロを組みました。 業務内容に変更があり、ある商品(商品名Cとします)のみsheet2ではなく、別のフォーマットへ差込印刷しなければならなくなりました。(別のフォーマットはsheet3とします) 商品Cも含めた全リストを、商品名であいうえお順に並べ替えて印刷(商品名順に印刷したい)を行うためにはどのようにマクロを書き換えれば良いか教えていただきたいです。 リスト並べ替え→商品Cの1行前まで差込印刷LOOP→商品Cをsheet3に差込印刷→商品Cの1行 後から差込印刷LOOPという組み立て方でいいのでしょうか? IF等使用して商品Cの前の行まで繰り返しを指示すればいいのかなと、自分なりに検索して調べてみましたが方法がわかりませんでした。 宜しくお願いします。 Range("A1:D100").sort_  Key1:=Range("A1"),_  Order1:=xlAscending,_  Header.=xlYes,_  Orientation:=xlTopToBottom Workheets("sheet1").Active Range(A1).Select Do Activecell.Offset(1,0).Select If Trim(ActiveCell.Value)=""Then Exit do End if If ActiveCell.EntireRow.Hidden=False Then With Worksheets("sheet2") .Range("A6").value=ActiveCell.Offset(0,0).Value .Range("D6").value=ActiveCell.Offset(0,1).Value .Range("G9").value=ActiveCell.Offset(0,2).Value .Range("J9").value=ActiveCell.Offset(0,3).Value .Printout End With End If Loop End Sub VBAを勉強しだしたばかりですが、今月中に変更する必要があり困っています。 よろしくお願いいたします。

  • リストボックスから項目を選択してセルに入力したいのです

    EXcel2003でマクロ作成中です。エクセルシートのN列を右クリックすると、ユーザーォームが現れ、その中のリストボックスから項目を選択すると選択文字が白色に反転します。 ユーザーホームの下方に設置した「入力する」ボタンをクリックする、アクティブセルにテキスト文字列が挿入されます。 Option Explicit Private Sub CommandButton1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub --------------------------- Private Sub CommandButton2_Click() Unload UserForm1 End Sub ------------------------------ これと同じものをB列につくりました。エクセルシートのB列を右クリックすると、リストボックスが表示されますが、その中の項目を選択しようとすると、一瞬にしてユーザーフォーム自体が消えてしまい項目を 選択できません。 Private Sub CommandButton1_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex) End If End With Unload UserForm2 End Sub ----------------------------- Private Sub CommandButton2_Click() Unload UserForm2 End Sub ------------------------------------------ まったく同じものを作って内容だけかえたのですが、できません。 どうしてでしょうか?ご教授おねがいします。

専門家に質問してみよう