2016-10-25 16 views
0

このコードは、データの列ヘッダー(複数のファイルをインポートした後)を削除するように設計されています。しかし、私はエラーが発生します: "1004"は "アプリケーション定義またはオブジェクト定義のエラー"です。私はSO上のさまざまなソリューションを参照しましたが、役に立たないものです。セルの値に基づいて行を削除します

私はこのコードスニペットを実行する前に、空白の行を削除し、これを含めて何がうまくいくかを示し、キーを保持することさえできます。

'Remove all rows with blanks first 
Set wb = Workbooks(ThisWorkbook.Name) 
'Remove blank rows based on if column 'B' is blank as a and B are filled when there is risk key showing 
wb.Worksheets("BatchData").Activate 
Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
'Now to delete based on column headers! 
Dim LastRow As Long 
LastRow = Cells(Rows.Count, 1).End(xlUp).Row 
'Filter Column A and delete selection 
'############# Error line below 
ActiveSheet.Range("A1:" & A & ":" & LastRow).AutoFilter Field:=2, Criteria1:= _ 
     "=Item", Operator:=xlOr, Criteria2:="=" 
Selection.EntireRow.Delete 

EDIT:

改正コード、いくつかの微調整もコメントと私はフィールド "2" 参照していたと1

Dim LastRow As Long 
LastRow = wb.Worksheets("BatchData").Cells(Rows.Count, 1).End(xlUp).Row 
'Filter Column A and delete selection 
ActiveSheet.Range("A1:A" & LastRow).AutoFilter Field:=1, Criteria1:= _ 
     "=Item", Operator:=xlOr, Criteria2:="=" 

ActiveSheetは 'A' を使用しようとしていたあたりとして.Range( "$ A $ 1:$ A $" & LASTROW)に基づいて.Offset(0、0).SpecialCells _ (xlCellTypeVisible).EntireRow.Delete

最終ラインエディット; VBA: How to delete filtered rows in Excel?オフセットは1,0から0,0

+1

まず、「Set wb = ThisWorkbook」を使用できます。第2に、 'LastRow'を使うときは、' LastRow = wb.Worksheets( "BatchData")のような特定のシートリファレンスを使う方が良いです。また、Range( "A1:A"&LastRow)に 'Range(" A1: "&A:"&LastRow) 'を変更してください。 –

+0

私は勘違いしています..." "A1: &A& ":"&LastRow'を追加して投稿に追加してください。 – FDavidov

+0

ところで、列/行全体ではなく、列/行内の範囲を削除しています。 – FDavidov

答えて

1

あなたのコードを少し修正しようとしている可能性のあるエラーを排除するために、以下のコードを試してみましょう。 2つのオプションのうち1つ:

オプション1:ヘッダー行を含むすべての行を削除します。

オプション2:ヘッダー行を除くすべての行を削除します。

Option Explicit 

Sub DeleteFilteredRows() 

Dim LastRow As Long 

With ThisWorkbook.Worksheets("BatchData") 

    ' remove blank rows based on if column 'B' is blank as a and B are filled when there is risk key 
    .Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

    ' find last row in Column ! 
    LastRow = .Cells(Rows.Count, 1).End(xlUp).Row 

    ' Filter Column A 
    .Range("A1:A" & LastRow).AutoFilter Field:=1, Criteria1:= _ 
      "=Item", Operator:=xlOr, Criteria2:="=" 

    ' option 1: delete also header row 
    .Range("A1:A" & LastRow).SpecialCells _ 
     (xlCellTypeVisible).EntireRow.Delete 

    ' option 2: if you want to keep the header row 
    .Range("A1:A" & LastRow).Offset(1, 0).SpecialCells _ 
     (xlCellTypeVisible).EntireRow.Delete 

End With 

End Sub 
関連する問題