/ /テキストに基づいて最高値を決定するVBA式-Excel、Excel式

テキストに基づいて最高値を決定するVBA式-Excel、Excel式

こんにちは現在私は問題を抱えています1列の4行の中で最も重要なテキストを表示します。私がここに持っているのは、優れた、良い、公正、そして悪いクライアントの発言です..そして、その列に存在する場合はセルに優れたという単語を表示したいと思います。そうでない場合は、良いが存在する最高値である場合は、それを表示します。公平な場合は公平、最後に悪い場合は悪い表示 ここに画像の説明を入力

回答:

回答№1は2

これがあなたの質問に答えるのに遅すぎないことを願っています。次の式を試してください。

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

参考のために画像を参照してください:

ここに画像の説明を入力


回答№2の場合は1

それは公式ではありませんが、私としての主な問題です上記の4つの既知の値を評価するのではなく、空の未知の値を除外することを参照してください。さらに、そのようなことが起こったとき、ユーザーはそれについて知らされ、正しい決定をしなければなりません...

"""""""
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
"""