Excel:如何使用此公式MAX(IF(ISNUMBER(搜索(T $ 2,C2)),Z $ 2)...作为数组?

时间:2015-08-02 00:55:18

标签: excel excel-formula

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行到数百类型键入公式太困难了。有没有办法将这个公式用作数组?

2 个答案:

答案 0 :(得分:1)

如果可以合理地假设您在Excel 2010或更高版本下运行,则AGGREGATE¹ function会快速制定公式。

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

AGGREGATE for conditional MAX

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