Excel中的多列多值搜索?
我有以下结构的(大)Excel表,其中每个单元格可能包含多个值。该组值是预先确定的,但用户不知道,除了国家(假设地理知识良好) 我想在第一列中找到与“印度”或“越南”匹配的行, 第二栏为“水电”,第三栏为“股权”或“债务” 如何在Excel中实现这样的搜索 据我所知,唯一的解决方案是对多个“contains”语句以及这些语句之间的语句使用自定义自动筛选Excel中的多列多值搜索?,excel,search,Excel,Search,我有以下结构的(大)Excel表,其中每个单元格可能包含多个值。该组值是预先确定的,但用户不知道,除了国家(假设地理知识良好) 我想在第一列中找到与“印度”或“越南”匹配的行, 第二栏为“水电”,第三栏为“股权”或“债务” 如何在Excel中实现这样的搜索 据我所知,唯一的解决方案是对多个“contains”语句以及这些语句之间的语句使用自定义自动筛选 这不是很实用,因为必须手动键入搜索表达式,而且用户不知道第二列和第三列的可能值的范围。假设:国家在列A,技术在列B等等。在您的示例中,行1是e标
这不是很实用,因为必须手动键入搜索表达式,而且用户不知道第二列和第三列的可能值的范围。假设:
国家
在列A
,技术
在列B
等等。在您的示例中,行1
是e标题行和行2
是数据的第一行
一种方法是使用如下公式添加一列:
=AND(OR(ISNUMBER(FIND("India",A2)),ISNUMBER(FIND("Vietnam",A2))),ISNUMBER(FIND("hydro",B2)),OR(ISNUMBER(FIND("equity",C2)),ISNUMBER(FIND("debt",C2))))
对于满足条件的所有行,结果将是
TRUE
值。如果您同意使用VBA,请遵循方案:
将此代码添加到更改事件
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A3").Value = "" Then
ActiveSheet.Range("$A$7:$C$10").AutoFilter Field:=1, _
Criteria1:="*" & Range("A2").Value & "*"
Else
ActiveSheet.Range("$A$7:$C$10").AutoFilter Field:=1, _
Criteria1:="*" & Range("A2").Value & "*", Operator:=xlOr, _
Criteria2:="*" & Range("A3").Value & "*"
End If
If Range("B3").Value = "" Then
ActiveSheet.Range("$A$7:$C$10").AutoFilter Field:=2, _
Criteria1:="*" & Range("B2").Value & "*"
Else
ActiveSheet.Range("$A$7:$C$10").AutoFilter Field:=2, _
Criteria1:="*" & Range("B2").Value & "*", Operator:=xlOr, _
Criteria2:="*" & Range("B3").Value & "*"
End If
If Range("C3").Value = "" Then
ActiveSheet.Range("$A$7:$C$10").AutoFilter Field:=3, _
Criteria1:="*" & Range("C2").Value & "*"
Else
ActiveSheet.Range("$A$7:$C$10").AutoFilter Field:=3, _
Criteria1:="*" & Range("C2").Value & "*", Operator:=xlOr, _
Criteria2:="*" & Range("C3").Value & "*"
End If
End Sub
将自动筛选设置为打开。当您在上面的单元格中写入时,自动筛选将自动更新。对于自动筛选,是。您只能有两个条件。
如果要使用更多条件,可以使用高级过滤器。遵循此方案: 在上半部分,您可以编写所需的标准。请参阅链接: 但是很快:行是和,列是或。
在第二部分中,您构建了高级筛选器所需的格式。在第三部分中,您对数据进行了筛选。
将此代码添加到工作表中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ValR As Integer
ValR = 0
For i = 8 To 11
If Range("A" & i).Value <> "" Then ValR = i
If Range("B" & i).Value <> "" Then ValR = i
If Range("C" & i).Value <> "" Then ValR = i
Next
Range("A13:C17").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A7:C" & ValR), Unique:=False
End Sub
Private子工作表\u更改(ByVal目标作为范围)
作为整数的Dim ValR
ValR=0
对于i=8到11
如果范围为(“A”&i).Value“”,则ValR=i
如果范围(“B”和i).Value为“”,则ValR=i
如果范围(“C”&i).Value为“”,则ValR=i
下一个
范围(“A13:C17”)。高级筛选器操作:=XLFilterInput,标准范围:=_
范围(“A7:C”&ValR),唯一:=假
端接头
在A8中添加公式:
=IF(A2<>"";CONCATENATE("=*";A2;"*");"")
=IF(A2“”;连接(“=*”A2;“*”);“”)
并自动完成A8:C11。组合条件有点复杂,但功能更强大。非常感谢!这正是我所需要的。据您所知,有一个细节,可以有三个搜索字段吗?我尝试过,但无法使其工作。这两个搜索条件是否是autofilter可以处理的最大值?
=IF(A2<>"";CONCATENATE("=*";A2;"*");"")