• 締切済み

EXCELで文字検索したセルの行と前後の行の削除の方法

EXCEL-VBAを使ってワークシートのデータ整形をしています。 ある文字列を検索し、その文字列を含む行とその前後の行を削除するロジックを記述したいのですがうまくできません。 例:検索文字列「合計」、"合計"の入っているセル「B120」のとき、B119~B121の3行分の行削除をしたい。 おそらく検索された文字列を含むセルの行番号を取得してその番号-1と+1の行を選択して削除すればよいのではないかと思ってるのですが、もっと良い方法があるのでしょうか? よろしくお願いします。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

マクロを書いてみました。 検索する文字を入力します。シートの中であるだけ削除してしまいます。 削除する行が2行以上離れている保証があれば簡単なのですが、連続して削除対象、1行飛んで削除対象も考慮するのに考え込んでしまいました。解決方法として、最初に削除するセルに『削除する行です』と書き込んで、後から『削除する行です』と書いた行を削除しています。(多分うまくいくと思います) 削除なので、コピーを取って実行して下さい。(保存しなければいい?) 標準モジュールに貼り付けます。 Public Sub Kensaku_Delete2()   Dim sch_Moji As String '検索する文字   Dim sch_rg As Range '検索したセル   Dim sch_RowNo As Long '検索したセルの行番号   sch_Moji = InputBox("検索する文字を入力して下さい。")     If sch_Moji = "" Then       Exit Sub     End If   Application.ScreenUpdating = False   '削除する行に印を付ける   Range("A1").Select   Set sch_rg = Cells.Find(sch_Moji)   While Not (sch_rg Is Nothing)     If sch_rg.Row <> 1 Then       sch_rg.Offset(-1, 0) = "削除する行です" '前の行に印をつける     End If     sch_rg.Offset(1, 1) = "削除する行です" '次の行に印をつける(1つ右)     sch_rg.Offset(0, 0) = "削除する行です" '探した行に印をつける     Set sch_rg = Cells.FindNext(ActiveCell)   Wend   '印を付けた行を削除する   Range("A1").Select   Set sch_rg = Cells.Find("削除する行です")   While Not (sch_rg Is Nothing)     Rows(sch_rg.Row).Delete     Range("A1").Select     Set sch_rg = Cells.FindNext(ActiveCell)   Wend   Application.ScreenUpdating = True End Sub

関連するQ&A