2014-04-02 36 views
0

我有一個 「工作表Sheet」 看起來像這樣:VBA - 自動過濾增加片尺寸基本上

Sheet1

我exemplatory數據具有73行。現在,我想根據某些列過濾該數據集,並將過濾的數據集複製到另一個工作表「Sheet2」。使用此SO question代碼(有一些調整),我想出了下面的代碼:

Option Explicit 
'Filter input sheet (Sheet1) and copy filtered sheet to new sheet 
Sub FilterAndCopySheet1() 
'https://stackoverflow.com/questions/13934821/vba-for-filtering-columns 

    Dim LastRow As Long 
    Sheets("Sheet2").UsedRange.Offset(0).ClearContents 

    With Worksheets("Sheet1") 
     .AutoFilterMode = False 
     With Worksheets("Sheet1").Range("A1").CurrentRegion 
      .AutoFilter 

      'Array filter from NameList 
      .AutoFilter field:=2, Criteria1:="USD", Operator:=xlFilterValues 
      .AutoFilter field:=4, Criteria1:="OCR", Operator:=xlFilterValues 
      .AutoFilter field:=5, Criteria1:="Europe", Operator:=xlFilterValues 
      .AutoFilter field:=7, Criteria1:="Finance", Operator:=xlFilterValues 
      LastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
      .Range("A1:A" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy _ 
        Destination:=Sheets("Sheet2").Range("A1") 
     End With 
     .AutoFilterMode = False 
    End With 

End Sub 

代碼工作就好了。唯一的問題是文件大小從大約25Kb增加到25MB。當然,這會降低一切。

所以我的問題是:爲什麼這個代碼導致這樣的增加?我的代碼效率不高嗎?或者它是自動過濾方法的固有問題?如果是這樣,替代方案會是什麼?

回答

0

玩了一點點的時間和已經閱讀格式在Excel中要瘋了,我發現,在子結束的幾行代碼解決這個問題:

With Sheets("Sheets2") 
    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
    .Range(.Cells(LastRow + 1, 1), .Cells(.Rows.Count, .Columns.Count)).Clear 
    .Range(.Cells(1, 9), .Cells(.Rows.Count, .Columns.Count)).Clear 
End With 

儘管如此,在原始代碼添加非常多的不需要的格式以致樣本大小爆炸的情況下會很有趣。