如何检查具有多个值的单元格,每个元素中的第n个字母用逗号分隔?

时间:2016-01-12 16:20:17

标签: excel excel-vba excel-formula excel-2010 vba

示例数据:

我有一个单元格:( ABCD,HASDR,HGND,JHDDHS)

另一行会有(ABDD,FADF,HGND)

我希望能够检查每个元素的第4个字母是否是字母" D"或" F"如果ALL元素为true,则返回一个字符串值,但问题是这些值在一个单元格中。我也试过了文字到列,但我不知道如何比较一行数据。

编辑:

如果我想检查字母的第4个字母" D"或" F" ? 蒂姆,谢谢你到目前为止所做的一切,我相信你是一个非常忙碌的人,所以我感谢你从我那里得到的所有帮助。

标准:

如果所有元素中的第4个字母是" D"或" F"然后结果是字符串"结果1"

如果所有元素中的第4个字母是" T"结果是"结果2"

如果所有元素中的第4个字母是混合组,则结果为"混合"

样品:

ABCD,ABCD,ABCF= Result 1
ABCD,ABCD,ABCD= Result 1
ABCF,ABCF,ABCF= Result 1
ABCT,ABCT,ABCT= Result 2
ABCD,ABCD,ABCT = Mix

3 个答案:

答案 0 :(得分:1)

如果元素之间总是有逗号和空格,则以下方法可以判断所有元素是否包含字母“D”并在相邻单元格(B1)中放置true / false:

Sub CheckForTheD()

For x = 1 To Len(Range("A1").Value)
If Mid(Range("A1").Value, x, 1) = "," Then
    Y = Y + 1
    If Mid(Range("A1").Value, x + 5, 1) = "D" Then
        Z = Z + 1
    End If
End If
Next x

If Z = Y Then
Range("B1").Value = True
Else: Range("B1").Value = False
End If

End Sub

希望这有帮助。

答案 1 :(得分:1)

作为用户定义的函数:

Function GetResult(v)

    Dim arr, e, rv As String, p
    Dim nDF As Long, nT As Long, tot As Long

    v = Replace(v, "(", "") 'EDIT
    v = Replace(v, ")", "") 'EDIT

    arr = Split(v, ",")
    tot = UBound(arr) + 1 'number of values

    If tot > 0 Then
        rv = "Mixed" 'the default value
        For Each e In arr
            p = Mid(Trim(e), 4, 1)
            If p = "D" Or p = "F" Then nDF = nDF + 1
            If p = "T" Then nT = nT + 1
        Next e
        If nDF = tot Then rv = "Result 1"
        If nT = tot Then rv = "Result 2"
    End If

    GetResult = rv
End Function

如果您需要添加更多支票或更改逻辑,您应该可以从这里拿到它......

答案 2 :(得分:0)

假设您给出的两个示例代表了所有相关字符串,即在每种情况下字符串都包含在括号内,并且唯一的分隔符是"," (单个逗号后跟单个空格):

=SUMPRODUCT(0+(MID(","&A1&", αβγD",FIND(",",","&A1&", αβγD",ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))))+5,1)<>"D"))=0

根据您的新要求:

=SUMPRODUCT(0+(MMULT(0+(MID(","&A1&", αβγD",FIND(",",","&A1&", αβγD",ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))))+5,1)<>{"D","F"}),{1;1})<>1))=0

此致