プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!