Ich habe eine einzelne Zelle, die eine lange Liste von Zahlen enthält, die durch ein Komma und ein Leerzeichen getrennt sind.
Einige der Zahlen wiederholen sich und ich möchte wissen, welche Zahl am häufigsten wiederholt wird.
Die Funktion MODE funktioniert nicht und scheint für einen Bereich ausgelegt zu sein, in dem sich jeder Wert in einer eigenen Zelle befindet.
Beispiel für das, was ich brauche
Cell with numbers
123, 456, 456
Most frequently repeated value
456
Antwort1
Wenn Ihre Werte Zahlen sind, wie Sie zeigen:
=MODE.SNGL(FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b"))
erstellt "<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>"
eine XML-Zeichenfolge. Gibt dann FILTERXML(...,"//b")
das Zahlenarray zurück. MODE.SNGL
Gibt dann das größte sich wiederholende Element zurück.
Ob Text oder Mix:
=INDEX(FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b"),MODE.SNGL(MATCH(FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b"),FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b"),0)))
Dieses Mal verwenden wir Match, um ein Array von Zahlen zurückzugeben (wobei es mit der ersten Übereinstimmung übereinstimmt, im folgenden Fall wäre dies 1,2,2
). MODE_SNGL
Anschließend wird dies 2
an den INDEX zurückgegeben.
Antwort2
Probieren Sie diese kurze benutzerdefinierte Funktion:
Public Function splitt(s As String) As Variant
Dim mx As Long, i As Long, j As Long, mxkp As Long
arr = Split(s, ", ")
mx = 0
mxkp = 0
splitt = arr(0)
For i = 0 To UBound(arr)
v = arr(i)
mx = 0
For j = 1 To UBound(arr)
If v = arr(j) Then mx = mx + 1
Next j
If mx > mxkp Then
mxkp = mx
splitt = v
End If
Next i
End Function