2016-10-04 96 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

谢谢,我已经改进了答案,以防人们不想要空白处 –

相关问题