Excel SUMPRODUCT子字符串匹配

时间:2019-02-05 16:43:32

标签: excel match formula

我正在使用SUMPRODUCT来匹配一个等于许多事物之一的单元格。 使用以下公式,我尝试将值2147(来自多个值的列中的单个值)与数字2147的以下变体进行匹配:

=SUMPRODUCT( -- ("2147"=Table6[data])) > 0

 Table6[data]   Return Value
1 2147          TRUE
2 2147, 500     FALSE
3 2146-2148     FALSE
4 21475         FALSE

第一个TRUE和最后一个FALSE值与预期的一样(成功),但是我需要中间的两个值匹配TRUE(标识2147旁边{{1}之间的, 500 }。

2 个答案:

答案 0 :(得分:3)

这使用自定义功能。如果您使用它,建议您给它起一个更有意义的名称。

所以您将这个公式放在B1中并抄下来

=Match2(2147,A1)

概述中,该功能检查连字符是否存在(使用拆分),如果存在,则根据上下限检查所需的值。

如果没有,则再次使用Split,我们用逗号分开,如果结果数组中的任何元素等于我们的期望值,我们将返回TRUE。

Function Match2(d As Double, r As Range) As Boolean

Dim v As Variant, i As Long

v = Split(r, "-")
If UBound(v) = 1 Then
    If Val(v(0)) <= d And Val(v(1)) >= d Then
        Match2 = True
    Else
        Match2 = False
    End If
    'we could shorten the five lines above to
    'Match2 = (Val(v(0)) <= d And Val(v(1)) >= d)
Else
    v = Split(r, ",")
    For i = LBound(v) To UBound(v)
        If Val(v(i)) = d Then
            Match2 = True
            Exit Function
        End If
    Next i
    Match2 = False
End If

End Function

enter image description here

答案 1 :(得分:2)

仅供参考,这是公式:

=SUM(IF(ISNUMBER(SEARCH("-",TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),(ROW(INDEX(XFD:XFD,1):INDEX(XFD:XFD,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*99+1,99)))),(2147 >= --LEFT(TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),(ROW(INDEX(XFD:XFD,1):INDEX(XFD:XFD,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*99+1,99)),FIND("-",TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),(ROW(INDEX(XFD:XFD,1):INDEX(XFD:XFD,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*99+1,99)))-1))*(2147<=--MID(TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),(ROW(INDEX(XFD:XFD,1):INDEX(XFD:XFD,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*99+1,99)),FIND("-",TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),(ROW(INDEX(XFD:XFD,1):INDEX(XFD:XFD,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*99+1,99)))+1,99)),--(2147 = --TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),(ROW(INDEX(XFD:XFD,1):INDEX(XFD:XFD,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*99+1,99)))))>0

这是一个数组公式,退出编辑模式时需要使用Ctrl-Shift-Enter而不是Enter进行确认。

enter image description here

相关问题