■以下の表のE列のステータスが「キャンセル」のデータについて行ごと削除するとします。
・行削除前
・行削除後
■上の行から削除すると変数「i」で参照する場所がどんどんズレて行くので、
最終行から順にチェックして下から削除していくのがポイント。
Sub fncTargetRowDelete(strTarget As String, targetColumn As Integer, startRow As Integer) '------------------------------------------------ '機能:特定の文字列の入ったセルのある行を削除する '引数1:対象の文字列 '引数2:対象の文字列の存在する列 '引数2:チェックする値の入っている列の先頭行 '------------------------------------------------ 'カウント用変数 Dim i As Long '最終行格納用変数 Dim lastrow As Long '対象列の最終行を取得 lastrow = Cells(Rows.Count, targetColumn).End(xlUp).Row '対象文字列の入ったセルのある行を下から順に削除 For i = lastrow To startRow Step -1 With Cells(i, targetColumn) If .Value = strTarget Then .EntireRow.Delete End If End With Next i End Sub
■ファンクションプロシージャの呼び出し元のプロシージャ
Sub テスト() Dim strPath As String Dim strSheetName As String Dim wb As Workbook '対象シート名を設定 strSheetName = "Sheet1" '他のブックを操作する場合。他のブックでない場合は点線で囲んだ部分をコメントアウト '------------------------------------------------------------------- '対象ブックのパスを設定 strPath = "C:\Users\cryst\OneDrive\デスクトップ\テスト\注文.xlsx" Set wb = Workbooks.Open(strPath) '-------------------------------------------------------------------- '対象シートをアクティブにする Sheets(strSheetName).Activate '呼び出し先プロシージャに引き数を渡す Call fncTargetRowDelete("キャンセル", 5, 2) '他のブックを操作する場合。他のブックでない場合は点線で囲んだ部分をコメントアウト '------------------------------------------------------------------- 'ブックを保存して閉じる wb.Close True Set wb = Nothing '------------------------------------------------------------------- '他のブックではないときは以下のコードでブックを保存 'ActiveWorkbook.Save End Sub