如何在Excel中过滤和复制数据?

时间:2010-09-08 09:59:59

标签: excel filter

我在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

有一个简单的解决方案吗?
事实上,我没有过滤精确匹配显然会使问题更加困难。

提前致谢!

1 个答案:

答案 0 :(得分: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代码不满意,那么请告诉我,我确信我可以设法将其转换为工作表功能(如果您更改了条件,这还有更新的优势。 ..)

西蒙