2017-10-27 15 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 : = 거짓, 오리 엔테이션 : = 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