2016-10-04 31 views
1

我有一列按字母順序排列在A列中的用戶名列表,其中一些列出現多次。 我想在列B中竄改用戶名,如果它出現少於或等於4次。Excel - 在A列中查找小於或等於4次的值並在列B中打印

我是否需要一個數組來查看列中所有不同的用戶名值才能找到出現小於或等於4次的值?

+1

你想要列表包括只有唯一的名稱,或者每次出現一個名稱? –

+0

對不起,只有唯一的名字。所以我真的只是B列填充每個用戶名,如果它出現小於或等於4次在A –

回答

2

考慮:

Sub dural() 
    Dim A As Range, B As Range, v As String, K As Long 
    Set A = Intersect(Range("A:A"), ActiveSheet.UsedRange) 
    Set B = Range("B:B") 

    K = 1 

    With Application.WorksheetFunction 
    For Each aa In A 
     v = aa.Value 
      If v <> "" Then 
       If .CountIf(A, v) <= 4 Then 
        If .CountIf(B, v) = 0 Then 
         Cells(K, "B").Value = v 
         K = K + 1 

        End If 
       End If 
      End If 
    Next aa 
    End With 
End Sub 

enter image description here

+0

不知道這是否令人印象深刻或過度。 –

+0

@DavidAndreiNed我也不確定。 –

2

添加輔助列,將下面的公式在第二行:

=IF(AND(COUNTIF(A:A,A2)<=4,COUNTIF($A$2:A2,A2)=1),MAX($B$1:B1)+1,"") 

抄下:

enter image description here

此時您可以過濾非空白單元格並將它們複製到另一個範圍。

如果你想用一個公式來獲取列表,然後在另一列第2行將這個:

=IFERROR(INDEX(A:A,MATCH(ROW(1:1),B:B,0)),"") 

抄下。

enter image description here

1

無需幫手列或VBA,只是一點點微調的IF函數:)

=IF(COUNTIFS(BE:BE,BE2)<=4,IF(COUNTIFS($BE$1:BE2,BE2)=1,BE2,"0"),"0")

^這裏,BE是所有你的數據是,在開始第2行

作用:

  1. 如果名稱出現4個或更少倍,

  2. 如果這是第一次的名稱出現在列

  3. 打印名稱
  4. (否則插入0)

要刪除0值,即空行:

  1. 將公式粘貼在與列相同的值上(這樣您就可以...)
  2. .. Replace AllCtrl-H)「0」s with nothing「」(這樣你就可以...)
  3. ..選擇使用Go To按Ctrl-G> Special > Blanks
  4. 刪除(移動單元格上)

你也可以簡單地過濾掉空白/ 0值的空行

+0

謝謝,我已經改進了答案,以防人們不想要空白處 –

相關問題