在数据量很大时,如何用vba代替countif函数进行计数统计?

countif函数可以统计单元额区域中指定数据的出现次数,是一个常用的excel函数。

在数据量较少时,这个函数的统计可以很轻松的完成。

但是当遇到十万行级别的数据时,再利用countif函数进行技术统计会导致excel陷入死机或卡机状态,函数的计算非常缓慢。

为了提高在一列单元格区域(数据量非常大)中统计指定数据出现的次数,可以使用字典对象进行统计,以下是一个通用的计数统计示例vba代码:

Sub QQ1722187970()
    Excel.Application.ScreenUpdating = False
    Excel.Application.DisplayAlerts = False
    Excel.Application.Calculation = xlCalculationManual
    Dim oDic As Object
    '创建字典对象
    Set oDic = CreateObject("Scripting.Dictionary")
    Dim oWK  As Worksheet
    '指定统计哪个工作表
    Set oWK = Sheet1
    With oWK
        For i = 2 To .Range("B1048576").End(xlUp).Row
            '获取要计数的单元格的内容
            sText = .Cells(i, "b").Value
            If Len(sText) Then
                With oDic
                    '如果存在就计数+1
                    If .exists(sText) Then
                        .Item(sText) = Val(.Item(sText)) + 1
                    Else
                        '不存在就计数为1
                        oDic.Add sText, 1
                    End If
                End With
            End If
        Next i
        For i = 2 To .Range("B1048576").End(xlUp).Row
            sText = .Cells(i, "b").Value
            If Len(sText) Then
                '将统计的结果输出到指定的列
                .Cells(i, "C") = oDic.Item(sText)
            End If
        Next i
    End With
    Excel.Application.Calculation = xlCalculationAutomatic
    Excel.Application.DisplayAlerts = True
    Excel.Application.ScreenUpdating = True
End Sub
       

发表评论