Excel中的多列多值搜索?

时间:2014-05-22 12:25:28

标签: excel search

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

Country                    Technology         Type of financing   Col 4
Peru, Vietnam, Thailand    solar, hydro       equity              xx
China, India               hydro, nuclear     debt, equity        xx

我想在第一列中找到与“India”或“Vietnam”相匹配的行, 第二栏中的“水电”,第三栏中的“公平”或“债务”。

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

我所知道的唯一解决方案是使用带有多个“contains”语句的Custom AutoFilter,并在语句之间使用OR。

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

3 个答案:

答案 0 :(得分:0)

假设:Country位于A列中,Technology位于B列中,依此类推。在您的示例中,行1是标题行,行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

答案 1 :(得分:0)

如果您同意使用VBA,请遵循以下方案:

enter image description here

将此代码添加到Change事件...

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

启用自动过滤器。当您在上部单元格中写入时,自动过滤器会自动更新。

答案 2 :(得分:0)

对于Autofilter,是的。您只能有两个标准 如果要使用更多条件,可以使用高级过滤器。遵循这个计划:

enter image description here

在上半部分,您可以编写所需的标准。看到链接: http://office.microsoft.com/en-us/excel-help/filter-by-using-advanced-criteria-HP005200178.aspx#BMexample1 但很快:行是AND,列是OR。
在第二部分中,您构建了Advanced Filter want格式。在第三部分,您已经过滤了数据 将此代码添加到工作表中:

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

在A8中添加公式:

=IF(A2<>"";CONCATENATE("=*";A2;"*");"")

并自动完成A8:C11 组装标准有点复杂,但更强大。