我想检查矩阵的哪个单元格值包含在"产品名称"并在同一行中返回一个值,但不同的列(列A)。
我使用此功能,但它只检查一列而不是矩阵:
=INDEX(A$11:A$13, AGGREGATE(15, 6, ROW($1:$3)*SIGN(MATCH("*"&A$11:A$13&"*", B2, 0)), 1))
答案 0 :(得分:2)
这个公式可行,但它很长,并且添加到矩阵只会增加长度:
=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)))))
它基本上一直在逐列查找,直到找到有效的答案。如上所述,如果需要更多新模型,则需要为数据矩阵中的每一列添加iferror公式。
更简短的方法是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 。在该窗口中转到插入==>模块。进入该模块粘贴上面的代码。
Here是对图片的更好解释。
可以直接从工作表中调用它。在B2中:
=FINDINSTRING(A2,$A$11:$D$13)
然后,数据矩阵的大小无关紧要。