Tengo una sola celda que contiene una larga lista de números, delimitados por una coma y un espacio.
Algunos de los números se repiten y quiero saber cuál número se repite más.
La función MODO no funciona y parece diseñada para funcionar en un rango donde cada valor está en su propia celda.
Ejemplo de lo que necesito
Cell with numbers
123, 456, 456
Most frequently repeated value
456
Respuesta1
Si sus valores son números como los que muestra:
=MODE.SNGL(FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b"))
Crea "<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>"
una cadena xml. Luego FILTERXML(...,"//b")
devuelve la matriz de números. Luego MODE.SNGL
devuelve el elemento repetido más grande.
Si es texto o una combinación:
=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)))
Esta vez usamos Match para devolver una matriz de números (donde coincide con la primera coincidencia, en el caso siguiente sería 1,2,2
) Luego MODE_SNGL
devuelve 2
al ÍNDICE.
Respuesta2
Pruebe esta breve función definida por el usuario:
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