2017-10-27 5 views
0

〜50,000行のデータを含むスプレッドシートがあります。この値は、より多くのデータを取り込む機能があるため変動します。Excel VBAマクロ:フィルターを組み込んで、マクロを使用して表示された空の行を削除します。

私がやりたいことは、私が望まない項目を表示するために私の列フィルター(行2)を使用できることです。 次に、マクロはすべての可視値を削除し、フィルタをオフにし、すべての空の行を削除し、最後に2行目のフィルタを元に戻します。次のコードはこれを行うように設計されていますが、データ行列全体に空の行が残ります。ご協力ありがとうございました!

Sub DeleteVisible_Empty_BlankRows() 
    Application.ScreenUpdating = False 
    Range("C3:V" & rows.count).ClearContents 
    Worksheets("MyDataPull").AutoFilterMode = False 

'Ungroup & regroup necessary columns 
    Columns("F:K").Columns.Ungroup 

    Dim r As Range, emrows As Long, i As Long 
    LRI = Mydatapull.Cells(Mydatapull.rows.count, "C").End(xlUp).Row 

'Filter column C from A to Z so that blanks are put at the bottom 
    Range("C3:V" & LRI).Sort Key1:=Range("C3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal 

'Filter to only show blanks 
    Range("C3:V" & LRI).AutoFilter Field:=1, Criteria1:="=", Operator:=xlOr, Criteria2:="=" & "" 

'Delete blanks 
    Range("C3:V" & LRI).EntireRow.Delete 

'Turn filters back on 
    Worksheets("MyDataPull").AutoFilterMode = False 

'Delete Extra rows 
    LRI = Mydatapull.Cells(Mydatapull.rows.count, "C").End(xlUp).Row 
    Range("C" & LRI + 1 & ":V" & rows.count).EntireRow.Delete 

    Mydatapull.Range("C2:V2").AutoFilter 
    Columns("F:K").Columns.Group 

End Sub 
+0

すべての空白を一番下に置きます。 –

+0

'Range(" C3:C "&LRI)を使用しようとしました.Sort Key1:= Range(" C3 ")、Order1:= xlAscending、Header := xlGuess、OrderCustom:= 1、MatchCase:= False、Orientation:= xlTopToBottom、DataOption1:= xlSortNormal'これは空白の行を一番下に置きます。実際に行を削除したい – Picapiedra

+0

空の行と削除された行を区別する方法はありますか?空白の行が一番下にある場合、削除された行は同じに見えませんか? –

答えて

0

私はこれを理解しました。上記の更新されたコードを参照してください。

0

最初にデータをフィルタリングしてから空の行を削除しましたか?シートがフィルタリングされていないときには、私は個人的にコンテンツを使ってより多くの成功を収めました。

ActiveSheet.AutoFilter.Sort.SortFields.Clear ActiveSheet.ShowAllData

をあなたは空行を削除する前に: 追加してみてください。

それがあなたに役立つかどうか教えてください。

+0

私が上に投稿したコード... ^^^ 'Worksheets(" MyDataPull ")。AutoFilterMode = False' – Picapiedra

+0

良い点は、それを見ませんでした。行全体を削除しようとしている場合は、必ず '.EntireRow'をインクルードしてください。さもなければ、あなたの変数 'Mydatapull'が定義されていないことがわかりましたが、これは単に' Worksheets( "MyDataPull") 'の省略形にすぎないと思います。 'LRI'の価値観は? –

+0

私は使用しているコードを更新しました。 LRIは索引の最後の行です。 'mydatapull'はシートの文字通りの名前なので、' worksheets( "mydatapull")と同じように動作します。このコードは動作しますが、ブランクは一番下に残ります。横列2)、スクロールバーは超小型でシートの負荷をゆっくりとする – Picapiedra

関連する問題