Excel:如何使用这个公式MAX(IF(ISNUMBER(SEARCH(T $ 2,C2)),Z $ 2)…作为数组?

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)中匹配每个string(C)和模式(包含通配符),以返回列(Z)中同一行的最大值。

对于c列中的每个单元格,我必须search超过一百个模式,发现从第2行到几百个公式太困难。 有什么办法可以用这个公式作为数组吗?

如果可以合理地假设你在Excel 2010或更高版本下运行,那么AGGREGATE¹函数将会做出一个快速公式。

 =AGGREGATE(14, 6, ((C2:C9<>"")*(Z2:Z9))/ISNUMBER(SEARCH(C2:C9, T2:T9)), 1) 

AGGREGATE为条件MAX

这实际上是使用AGGREGATE的LARGE子函数 。 如果你想要第二个,第三个等最大值,那么只需要replace最后一个用作k参数。 例:

 =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中引入的。如果您有以前的版本,请发表评论,也可能有其他解决scheme。

你可以使用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 
  • 复制上面的代码
  • 打开你的工作簿
  • 按Alt + F11打开VBE窗口
  • 在菜单中select插入 – >模块
  • 将代码粘贴到VBE窗口中
  • 将100更改为要包含的最后一行
  • 将“A2”更改为您希望公式进入的单元格
  • 按Alt + F11closuresVBE窗口
  • 按Alt + F8打开macros窗口
  • 我们创build的macros应该是唯一列出的(如果没有select它)
  • 点击运行