我有(大)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。
这不太实用,因为必须手动输入搜索表达式,因为用户不知道第二和第三列的可能值的范围。
答案 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,请遵循以下方案:
将此代码添加到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,是的。您只能有两个标准 如果要使用更多条件,可以使用高级过滤器。遵循这个计划:
在上半部分,您可以编写所需的标准。看到链接:
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 组装标准有点复杂,但更强大。