2017-10-02 29 views
0

2つの別々のタブに2つのレポートを作成するVBAコードがあります。コードによって生成された最初のレポートは正常に動作し、望ましい出力を生成します。しかし、第2の報告書はそうではない。最初の報告は、このコードを使用する:Excel VBA範囲外の行を削除する

'Find the last row of the table 
lastRow = Cells(Rows.Count, 1).End(xlUp).Row 

'Autofit all columns 
Cells.Select 
Cells.EntireColumn.AutoFit 

'Filter then delete all rows that don't have a client 
Selection.AutoFilter 
ActiveSheet.Range("$A$1:$P" & lastRow).AutoFilter Field:=3, Criteria1:="=" 
ActiveSheet.Range("$A$2:$P" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
ActiveSheet.Range("$A$1:$P$256").AutoFilter Field:=3 'unfilter this column 

(異なるタブに)第二の報告は、何らかの形で1行を削除する以下のコード、(列ヘッダー)を使用し、それによって下流の影響を引き起こします。

'Find the last row of the table 
lastRow = Cells(Rows.Count, 1).End(xlUp).Row 

'Autofit all columns 
Cells.Select 
Cells.EntireColumn.AutoFit 

'Filter then delete all rows that don't have a client 
Selection.AutoFilter 
ActiveSheet.Range("$A$1:$P" & lastRow).AutoFilter Field:=3, Criteria1:="=" 
ActiveSheet.Range("$A$2:$P" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
ActiveSheet.Range("$A$1:$P$256").AutoFilter Field:=3 'unfilter this column 

これは同じコードですが、異なる動作を生成しています。これを引き起こす原因は何ですか?

+2

本当に*行が削除されますか?それとも、それをフィルタリングしますか?また、おそらく '$ A $ 1'の使用ですか?それを '$ A $ 2'に変更すればどうなりますか? – BruceWayne

+2

私には意味がありません - 2番目のタブの列ヘッダーが1行目にあることを確認してください。 – dwirony

+0

カップルの質問があるので、私は順番に答えます。はい、それは行1を削除します。これを '$ A $ 2'に変更すると動作します:' ActiveSheet.Range( "$ A $ 1:$ P"&lastRow).AutoFilter Field:= 3、Criteria1:= "=" 'しかし、それは最初のコードがなぜ機能するのかを説明せず、2番目のコードは機能しません。最後に、はい、列ヘッダーが1行目にあることを確信しています。お手伝いいただきありがとうございます。 – battery514

答えて

0

この問題は、マクロがどこから実行されているかに基づいて、ブック内のアクティブな場所に基づいて表示される可能性があります。オブジェクトを修飾してみてください。

LastRow = Sheets("YOUR SHEET NAME").Cells(Rows.Count, 1).End(xlUp).Row 
Sheets("YOUR SHEET NAME").Cells.Select 
Sheets("YOUR SHEET NAME").Cells.EntireColumn.AutoFit 

これが役立ちます。

2番目のコードは3列目のフィルタリングです。セルC1が "="ではないと確信できますか?

関連する問題