MAX(IF(ISNUMBER(SEARCH(T$2,C2)),Z$2),IF(ISNUMBER(SEARCH(T$3,C2)),Z$3),IF(ISNUMBER(SEARCH(T$4,C2)),Z$4),.......
我想在下一列(T)中将每个字符串(C)与模式(包含通配符)匹配,以返回列(Z)中同一行的最大值。
对于c列中的每个单元格,我必须搜索超过一百个模式,并发现从第2行到数百类型键入公式太困难了。有没有办法将这个公式用作数组?
答案 0 :(得分:1)
如果可以合理地假设您在Excel 2010或更高版本下运行,则AGGREGATE¹ function会快速制定公式。
=AGGREGATE(14, 6, ((C2:C9<>"")*(Z2:Z9))/ISNUMBER(SEARCH(C2:C9, T2:T9)), 1)
这实际上是使用了AGGREGATE的LARGE subfunction。如果您想要第二个,第三个等最大值,那么只需替换用作 k 参数的最后一个 1 。例如:
=AGGREGATE(14, 6, ((C$2:C$9<>"")*(Z$2:Z$9))/ISNUMBER(SEARCH(C$2:C$9, T$2:T$9)), ROW(1:1))
填写第一,第二,第三等值。返回 0 表示没有更多匹配值。
¹ AGGREGATE是在Excel 2010中引入的。如果您有以前的版本,可以发表评论并且可能有其他解决方案。
答案 1 :(得分:0)
您可以使用VBA。要使用以下代码,请按照以下步骤操作。
Public Sub generateFormula()
Dim s as String
Dim i as Integer
s = "=MAX("
For i = 2 to 158
s = s & "IF(ISNUMBER(SEARCH(T$" & i & ",C2)),Z$" & i & "),"
Next
s = Left(s, Len(s)-1) & ")"
Range("A2").Formula = s
End Sub