カンマとスペースで区切られた長い数字のリストを含む単一のセルがあります。
いくつかの数字が重複していますが、どの数字が最も多く重複しているかを知りたいです。
MODE 関数は機能せず、すべての値が独自のセルにある範囲で機能するように設計されているようです。
必要なものの例
Cell with numbers
123, 456, 456
Most frequently repeated value
456
答え1
値が次のように数値である場合:
=MODE.SNGL(FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b"))
"<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>"
XML 文字列を作成します。次に、数値FILTERXML(...,"//b")
の配列を返します。次に、MODE.SNGL
最大の繰り返し項目を返します。
テキストまたはミックスの場合:
=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)))
今回は、Match を使用して数値の配列を返します (最初の一致に一致します。以下のケースでは は になります1,2,2
)。MODE_SNGL
次に は を2
INDEX に返します。
答え2
次の短いユーザー定義関数を試してください:
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