Excel formula Excel:查找字符串中包含的矩阵单元格,并返回相同的行但不同的列

Excel formula Excel:查找字符串中包含的矩阵单元格,并返回相同的行但不同的列,excel-formula,Excel Formula,我想检查矩阵的哪个单元格值包含在“Product name”中,并在同一行中返回一个值,但在不同的列中返回一个值(a列) 我使用此函数,但它只检查一列,而不检查矩阵: =INDEX(A$11:A$13, AGGREGATE(15, 6, ROW($1:$3)*SIGN(MATCH("*"&A$11:A$13&"*", B2, 0)), 1)) 简单地说,我想按产品名称计算汽车制造商。 此公式可行,但相当长,添加到矩阵中只会增加长度: =INDEX($A$11:$A$13, IF

我想检查矩阵的哪个单元格值包含在“Product name”中,并在同一行中返回一个值,但在不同的列中返回一个值(a列)

我使用此函数,但它只检查一列,而不检查矩阵:

=INDEX(A$11:A$13, AGGREGATE(15, 6, ROW($1:$3)*SIGN(MATCH("*"&A$11:A$13&"*", B2, 0)), 1))
简单地说,我想按产品名称计算汽车制造商。

此公式可行,但相当长,添加到矩阵中只会增加长度:

=INDEX($A$11:$A$13, IFERROR(AGGREGATE(15, 6, ROW($1:$3)*SIGN(MATCH("*"&A$11:A$13&"*", A2, 0)), 1),IFERROR(AGGREGATE(15, 6, ROW($1:$3)*SIGN(MATCH("*"&$B$11:$B$13&"*", A2, 0)), 1),IFERROR(AGGREGATE(15, 6, ROW($1:$3)*SIGN(MATCH("*"&$C$11:$C$13&"*", A2, 0)), 1),IFERROR(AGGREGATE(15, 6, ROW($1:$3)*SIGN(MATCH("*"&$D$11:$D$13&"*", A2, 0)), 1),0)))))
它基本上是一列一列地查找,直到找到一个有效的答案。如前所述,如果需要更多的新模型,则需要为数据矩阵中的每一列添加IFEROR公式

更快、更短的方法是UDF:

Function FINDINSTRING(Srch, rng) As String
Dim strArr() As String
Dim findArr()
Dim i&, j&, k&

findArr = rng.Value

strArr = Split(Srch, " ")


For i = LBound(strArr) To UBound(strArr)
    For j = LBound(findArr, 1) To UBound(findArr, 1)
        For k = LBound(findArr, 2) To UBound(findArr, 2)
            If UCase(strArr(i)) = UCase(findArr(j, k)) Then
                FINDINSTRING = findArr(j, 1)
                Exit Function
            End If
        Next k
    Next j
Next i

FINDINSTRING = "#N/A"

End Function
将其放置在工作簿附加的模块中时:

从Excel中点击Alt-F11。在该窗口中,转到插入==>模块。将上述代码粘贴到该模块中

这是一个更好的解释与图片

可以直接从工作表中调用它。换句话说:

=FINDINSTRING(A2,$A$11:$D$13)

那么数据矩阵的大小就无关紧要了。

只有一个问题,在保存文件(.xlsm)并重新打开后,宏函数停止工作并返回#NAME?@SeviDavidov send me you工作簿。斯科特。craner@gmail.com. “我来看看。”塞维达维多夫:你启用宏了吗?我派你来的。现在我启用了宏及其工作,谢谢@Scott Craner。