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的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它)
- 点击运行