2010-09-08 38 views
0

我在excel工作表中有很多數據。對於計算,我只想將這些數據僅限於相關數據。即:過濾數據並將該子集放入另一個工作表中。
相關數據是落在給定最小值和最大值內的數據。如何過濾和複製Excel中的數據?

例如:
假設我想過濾A列的值爲1到2之間的值,B列爲0到1之間的值。結果應該是這樣的。

A B C = Data 
1 0 0 0 
2 1 1 0 
3 2 0 3 
4 2 2 1 

    A B C = Result 
1 1 1 0 
2 2 0 3 

有沒有簡單的解決方案呢?
事實上,我不過濾精確匹配顯然使問題更加困難。

在此先感謝!

回答

0

我有一個快速的VBA程序,這將只是你想要什麼?

Private Sub MultiFilter(DataRange As Range, CriteriaRange As Range, OutputRangeTL As Range) 
    Dim intRowCounter As Integer 
    Dim intColCounter As Integer 
    Dim varCurrentValue As Variant 
    Dim blnCriteriaError As Boolean 
    Dim rngOutputCurrent As Range 

    If CriteriaRange.Columns.Count <> DataRange.Columns.Count Then 
     Err.Raise Number:=513, Description:="CriteriaRange and DataRange must have same column count" 
    End If 
    If CriteriaRange.Rows.Count <> 2 Then 
     Err.Raise Number:=513, Description:="CriteriaRange must be of 2 rows" 
    End If 

    Set rngOutputCurrent = OutputRangeTL.Resize(1, DataRange.Columns.Count) 

    For intRowCounter = 1 To DataRange.Rows.Count 
     For intColCounter = 1 To DataRange.Columns.Count 
      varCurrentValue = DataRange.Cells(intRowCounter, intColCounter).Value 
      If Not (varCurrentValue >= CriteriaRange.Cells(1, intColCounter) _ 
      And varCurrentValue <= CriteriaRange.Cells(2, intColCounter)) Then 
       ''#i.e. criteria doesn't match 
       blnCriteriaError = True 
       Exit For 
      End If 
     Next intColCounter 
     If Not blnCriteriaError Then 
      ''#i.e. matched all criteria 
      rngOutputCurrent.Value = DataRange.Resize(1).Offset(intRowCounter - 1).Value 
      Set rngOutputCurrent = rngOutputCurrent.Offset(1) 
     End If 
     blnCriteriaError = False 
    Next intRowCounter 
End Sub 

用法:

DataRange: 
0 0 0 
1 1 0 
2 0 3 
2 2 1 

CriteriaRange: 
1 0 0 
2 1 10 

然後做:

Public Sub DoTheFilter() 
    MultiFilter Range("MyDataRange"), Range("MyCriteriaRange"), Range("MyOutputRangeTopLeft") 
End Sub 

的CriteriaRange只是一個2行的範圍,給出了每列的最小值和最大值。

這不是我確定的最高效的方式,但我用它作爲快速修復,因爲我需要做一次或兩次。

如果你不習慣使用VBA代碼,那麼讓我知道,我相信我可以設法將它轉換爲工作表函數(如果你更改了標準,這也會有更新的優勢) ...)

Simon