Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel中的多列多值搜索?_Excel_Search - Fatal编程技术网

Excel中的多列多值搜索?

Excel中的多列多值搜索?,excel,search,Excel,Search,我有以下结构的(大)Excel表,其中每个单元格可能包含多个值。该组值是预先确定的,但用户不知道,除了国家(假设地理知识良好) 我想在第一列中找到与“印度”或“越南”匹配的行, 第二栏为“水电”,第三栏为“股权”或“债务” 如何在Excel中实现这样的搜索 据我所知,唯一的解决方案是对多个“contains”语句以及这些语句之间的语句使用自定义自动筛选 这不是很实用,因为必须手动键入搜索表达式,而且用户不知道第二列和第三列的可能值的范围。假设:国家在列A,技术在列B等等。在您的示例中,行1是e标

我有以下结构的(大)Excel表,其中每个单元格可能包含多个值。该组值是预先确定的,但用户不知道,除了国家(假设地理知识良好)

我想在第一列中找到与“印度”或“越南”匹配的行, 第二栏为“水电”,第三栏为“股权”或“债务”

如何在Excel中实现这样的搜索

据我所知,唯一的解决方案是对多个“contains”语句以及这些语句之间的语句使用自定义自动筛选


这不是很实用,因为必须手动键入搜索表达式,而且用户不知道第二列和第三列的可能值的范围。

假设:
国家
在列
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;"*");"")