2017-08-29 109 views
0

我正在查找一個公式來列出值的出現次數,只有它們大於2次時纔會出現;並將結果顯示在圖像中。計數多次出現

例如,如果一個值重複2次,則顯示爲「2」,3次顯示「3」。所以如果在該範圍內有兩個重複的數字,那麼它將如下圖所示以「32」顯示。 (數字之間不需要逗號)。謝謝。

enter image description here

+0

我可以用你的公式,'22122111','33322111'和'44411411'得到你的模式。但我認爲你需要vba來獲得你正在尋找的答案。 –

+0

如果可能,我的第一選擇將是一個公式。但我也可以使用vba解決方案。 – Max

+0

如果一個數字可能重複的次數是固定的,那麼如果是超長公式,您可以到達那裏。 –

回答

2

下面是一個簡單的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) 

然後複製下來。

enter image description here

+0

斯科特,這個作品很棒。謝謝。如果我想在計數結尾添加一個字母,請說「r」,使其看起來像22r,32r,4r等。我應該添加到vba中?我可以玩公式,但與vba沒有多大關係。 – Max

+0

你可以把它放在代碼中,或者使用'= mycount(A2:H2)&「r」'作爲公式@Max。請注意:請下次將該要求放入原始帖子中。請記住標記爲正確。 –

+0

是的,我很抱歉,我期待一個公式,我忘記了vba。謝謝。 – Max

2

我得到了它的定義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)