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