如何在Excel中筛选和复制数据?

如何在Excel中筛选和复制数据?,excel,filter,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 有没有简单的解决方法? 事实上,我不过滤精确匹配显然使问题更加困难 提前谢谢 我有一个快速的V

我在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
有没有简单的解决方法?
事实上,我不过滤精确匹配显然使问题更加困难


提前谢谢

我有一个快速的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
然后做:

Public Sub DoTheFilter()
    MultiFilter Range("MyDataRange"), Range("MyCriteriaRange"), Range("MyOutputRangeTopLeft")
End Sub
CriteriaRange只是一个2行范围,给出每列的最小值和最大值

我敢肯定,这不是最优雅、最有效的方法,但我用它作为一种快速修复方法,因为我需要这样做一两次

如果您不习惯使用VBA代码,请告诉我,我确信我可以设法将其转换为工作表函数(如果您更改了条件,这还具有更新的附加优势…)

西蒙

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