excel vba公式根据文本确定最高值

嗨,目前我有一个列中的4行中显示最重要的文本有问题。 我在这里有客户的评论,这是优秀的,良好的,公正的和坏的。我想在单元格中显示优秀的单词,否则如果好的话是最高的值显示它,如果公平然后公正或最后如果不好然后显示不好, 在这里input图像描述

希望现在回答你的问题还为时不晚。 尝试下面的公式:

 =INDEX({"Bad","Fair","Good","Excellent"},MATCH(1,(MATCH({"Bad","Fair","Good","Excellent"},B2:E2,0)),0)) 

查看图片以供参考:

在这里输入图像说明

这不是一个公式,但正如我所看到的,主要的麻烦不在于将上面列出的四个已知值sorting,而是排除空值和未知值。 此外,发生这种情况时,必须通知用户并作出正确的决定。

 ''''''' Private Sub sb_Test_fp_Grade3() Debug.Print fp_Grade3(Selection, 1, True) End Sub Public Function fp_Grade3(pRng As Range, _ Optional pUnkMod& = 0, _ Optional pEmpDen As Boolean = False) As String ' pUnkMod - Mode of UnKnown grades handling ' 0-Ignore; 1-Info only; 2-Deny ' pEmpDen - Deny or not empty values. If Deny, then empty treated as Unknown ' according pUnkMod setting Const S_BAD As String = "BAD" Const S_FAI As String = "FAIR" Const S_GOO As String = "GOOD" Const S_EXC As String = "EXCELLENT" Const S_UNK As String = "UNK" ' UNKNOWN Dim rCell As Range Dim lVal&, lMax&, lUnk& Dim sGrades$(0 To 4), sRet$, sVal$ sGrades(0) = S_UNK sGrades(1) = S_BAD sGrades(2) = S_FAI sGrades(3) = S_GOO sGrades(4) = S_EXC lMax = 0 lUnk = 0 sRet = vbNullString For Each rCell In pRng sVal = rCell.Value If (LenB(sVal) > 0 Or pEmpDen) Then Select Case UCase(rCell.Value) Case S_BAD: lVal = 1 Case S_FAI: lVal = 2 Case S_GOO: lVal = 3 Case S_EXC: lVal = 4 Case Else: lVal = 0 End Select Select Case (lVal > 0) Case True ' Known values If (lVal > lMax) Then lMax = lVal If (lMax = 4) Then If (pUnkMod = 0) Then Exit For End If End If Case False ' UnKnown values Select Case pUnkMod Case 0 ' ignore them ' do nothing Case 1 ' info about them lUnk = lUnk + 1 Case Else ' 2 & any others - stop lMax = 0 Exit For End Select End Select End If Next If (lUnk > 0) Then sRet = " & " & lUnk & "x" & S_UNK sRet = sGrades(lMax) & sRet fp_Grade3 = sRet End Function '''