2016-06-23 3 views
0

So habe ich eine Funktion, um den Maximalwert in mehreren Kategorien zu finden. Anstatt den Wert auf mein "Max" zu speichern. Ich möchte stattdessen die Zeichenfolge/den Text speichern, der dem Maximalwert entspricht. Das ist, was ich habe:die Zeichenfolge anstatt Wert auf VBA Max-Funktion ausgeben

StartCell.Select 
StartCell.Offset(1, 28).Activate 
For i = 1 To Count 

Select Case ActiveCell.Value 
    Case "XX" 
    ActiveCell.Offset(1, 0).Activate 
    Case "0" 
    ActiveCell.Offset(1, 0).Activate 
    Case "DP0" 
    DP0Count = DP0Count + 1 
    ActiveCell.Offset(1, 0).Activate 
    Case "DP1" 
    DP1Count = DP1Count + 1 
    ActiveCell.Offset(1, 0).Activate 
    Case "DP2" 
    DP2Count = DP2Count + 1 
    ActiveCell.Offset(1, 0).Activate 
    Case "VP1" 
    VP1Count = VP1Count + 1 
    ActiveCell.Offset(1, 0).Activate 
    Case "VP2" 
    VP2Count = VP2Count + 1 
    ActiveCell.Offset(1, 0).Activate 
    Case "MP1" 
    MP1Count = MP1Count + 1 
    ActiveCell.Offset(1, 0).Activate 
End Select Next i 

Max = WorksheetFunction.Max(DP0Count, DP1Count, DP2Count, VP1Count, VP2Count, MP1Count) 
MsgBox Max 

ich die Ausgabe in etwa so aussehen wollen, Max = DP2 anstelle des numerischen Wert

Irgendwelche Ideen?

+0

Versuchen Sie 'text'? .... – findwindow

+0

Da Max 'DP2' ausgibt, möchten Sie die Antwort auf' DP2Count + 1' anzeigen? – BruceWayne

+0

Max gibt zur Zeit „10“ ist, wollen es ausgeben „DP2“ – Qmnguy

Antwort

3

Ich denke, das ist das, was Sie suchen. Nicht klar, wie Sie mit Bindungen umgehen möchten, wenn es zwei oder mehr "max" -Werte gibt.

Sub Tester() 

    Dim c As Range 
    Dim arrVals() As Long, arrNames, v As Long, vMax As Long, i As Long, m 

    arrNames = Array("DPO", "DP1", "DP2", "VP1", "VP2", "MP1") 

    ReDim arrVals(0 To UBound(arrNames)) 

    Set c = StartCell.Offset(1, 28) 

    For i = 1 To Count 

     If c.Value = "XX" Or c.Value = "0" Then 
      Set c = c.Offset(0, 1) 
     Else 
      m = Application.Match(c.Value, arrNames, 0) 
      If Not IsError(m) Then 
       arrVals(m - 1) = arrVals(m - 1) + 1 
       Set c = c.Offset(1, 0) 
      End If 
     End If 

    Next i 

    vMax = Application.Max(arrVals) 

    MsgBox arrNames(Application.Match(vMax, arrVals, 0) - 1) 


End Sub 
+0

das war perfekt, vielen Dank! – Qmnguy

+0

im Falle von Krawatten, ich will es in der folgenden Reihenfolge: MP1> VP2> VP1> DP2> DP1> DP0. irgendwelche Ideen, wie ich das umsetzen kann? Danke noch einmal! – Qmnguy

+0

Spiel sollte die erste zurück, die er findet, wenn 'vMax' gegen' arrVals' prüft, so können Sie die Werte in 'arrNames' bestellen Sie Ihre Vorlieben anzupassen ... –

Verwandte Themen