Excel计算值的出现次数

时间:2015-05-19 10:12:57

标签: excel vba excel-vba

我收到了邮政编码相关的数据。

我需要计算某些列中某些值的出现次数。样本数据如下。

Survey# PostCode
1       2136
1       2136
2       136
2       2136
1       2137
2       2137

我想获取这些数据并生成这种类型的Excel工作簿:

Postal Code Survey #1   Survey #2   Survey #3   Survey #4
2136        2           2           0           0
2137        1           1           0           0

我尝试使用while循环和以下代码编写代码来生成它。代码在没有while循环的情况下工作。

如果你注意到它看起来有效,但是,我必须选择我想要的邮政编码,然后运行宏......当我这样做时它很有效,它会累计所有出现的1, 2,3或4然后将这些计数值放在适当的列中。

我想要的是让它在列中运行,将所有事件与一个邮政编码(2136)相加,停止并将计数添加到列中。然后再次开始计算下一个邮政编码的出现,直到它到达下一个邮政编码,然后停止 - 添加计数。

Sub sort_PC_CPE()

Dim cell As Object
Dim count As Integer
Dim count1 As Integer
Dim count2 As Integer
Dim SV1Count As Integer
Dim SV2Count As Integer
Dim SV3Count As Integer
Dim SV4Count As Integer
Dim ofset As Integer
Dim newVal As Object

'Dim origvalue As Object

count = 0
count1 = 0
count2 = 0
SV1Count = 0
SV2Count = 0
SV3Count = 0
SV4Count = 0
ofset = -1

' if you use the for each cell... and then highlight the cells with the same postal code, this works (also commenting out the while loop)
'For Each cell In Selection

    While cell.Offset(ofset, 0).Value = cell.Value
        cell.Offset(ofset, 0).Select
        ofset = ofset - 1
    Wend

       'the following works well so long as you manually highlight the cells you want. 
        If cell.Offset(0, -3).Value = 1 Then

            SV1Count = SV1Count + 1
            cell.Offset(-count, 1).Value = SV1Count

            count = count + 1

        ElseIf cell.Offset(0, -3).Value = 2 Then

            SV2Count = SV2Count + 1
            cell.Offset(-count, 2).Value = SV2Count
            count = count + 1

        ElseIf cell.Offset(0, -3).Value = 3 Then

            SV3Count = SV3Count + 1
            cell.Offset(-count, 3).Value = SV3Count
            count = count + 1

        ElseIf cell.Offset(0, -3).Value = 4 Then

            SV4Count = SV4Count + 1
            cell.Offset(-count, 4).Value = SV4Count
            count = count + 1





    End If




End Sub

1 个答案:

答案 0 :(得分:0)

为什么不使用countifs?

我将样品放入A列和B列的新表中,DI列中的2136表示第1行,2137表示第2行。如果您有大量的邮政编码,请从源中复制整个列并粘贴到列D然后单击“数据”并删除“重复项”以获取不同的列表。

E1是这个公式:

=COUNTIFS($A:$A,COLUMN(E1)-4,$B:$B,$D1)

拖过4列,然后向下拖动2行

结果:

2136 2 2 0 0

2137 1 1 0 0