我正在查找一個公式來列出值的出現次數,只有它們大於2次時纔會出現;並將結果顯示在圖像中。計數多次出現
例如,如果一個值重複2次,則顯示爲「2」,3次顯示「3」。所以如果在該範圍內有兩個重複的數字,那麼它將如下圖所示以「32」顯示。 (數字之間不需要逗號)。謝謝。
我正在查找一個公式來列出值的出現次數,只有它們大於2次時纔會出現;並將結果顯示在圖像中。計數多次出現
例如,如果一個值重複2次,則顯示爲「2」,3次顯示「3」。所以如果在該範圍內有兩個重複的數字,那麼它將如下圖所示以「32」顯示。 (數字之間不需要逗號)。謝謝。
下面是一個簡單的UDF:
Function mycount(rng As Range) As String
Dim str As String
Dim rngcnt As Range
For Each rngcnt In rng
If InStr("," & str & ",", "," & rngcnt.Value & ",") = 0 Then
If Application.WorksheetFunction.CountIf(rng, rngcnt) > 1 Then
mycount = mycount & Application.WorksheetFunction.CountIf(rng, rngcnt)
str = str & "," & rngcnt
End If
End If
Next rngcnt
End Function
所以你在紙張上的呼叫將是:
=mycount(A2:H2)
然後複製下來。
我得到了它的定義VBA功能。本功能的方式使用字典,因此有必要對個基準添加到「Microsoft腳本運行」(看here)。另外,我使用了一個函數從here
Function Repetitions(rng As Range)
Dim dict As New Scripting.Dictionary
Dim res() As Integer
For aux = 1 To rng.Count
Dim numero As Integer
numero = rng.Cells(1, aux).Value
If Not dict.Exists(numero) Then
dict.Add numero, 1
Else
dict(numero) = dict(numero) + 1
End If
Next aux
Dim result As String
result = ""
For aux = 0 To UBound(dict.Items)
If dict.Items(aux) > 1 Then result = result & dict.Items(aux)
Next aux
While Len(result)
iTemp = 1
Temp = Left(result, 1)
For I = 2 To Len(result)
If StrComp(Mid(result, I, 1), Temp, vbTextCompare) = 0 Then
If StrComp(Mid(result, I, 1), Temp, vbBinaryCompare) = 1 Then
Temp = Mid(result, I, 1)
iTemp = I
End If
End If
If StrComp(Mid(result, I, 1), Temp, vbTextCompare) = 1 Then
Temp = Mid(result, I, 1)
iTemp = I
End If
Next I
Repetitions = Repetitions & Temp
result = Left(result, iTemp - 1) & _
Mid(result, iTemp + 1)
Wend
End Function
,在字符串中的字符排序畢竟,你將能夠使用功能的式在Excel中調用它如下例如:
=Repetitions(A2:F2)
我可以用你的公式,'22122111','33322111'和'44411411'得到你的模式。但我認爲你需要vba來獲得你正在尋找的答案。 –
如果可能,我的第一選擇將是一個公式。但我也可以使用vba解決方案。 – Max
如果一個數字可能重複的次數是固定的,那麼如果是超長公式,您可以到達那裏。 –