宏可从大型数据集中提取最小/最大/平均数据

时间:2019-04-19 09:53:21

标签: excel vba

我的excel文件中有2列,我想根据第一列中的信息获取第二行的价格的MIN / Max / Average。我无法使用常规功能,因为我的工作簿中有200,000行。

我以前用第一列中使用日期的其他数据做过此操作,现在我想更改它,因为我不使用日期。我在第一个if语句中遇到错误。

Sub Button1_Click()
Dim Rng As Range, Dn As Range, n As Long, c As Long, K As Variant
Set Rng = Range(Range("A2"), Range("A" & Rows.Count).End(xlUp))
With CreateObject("scripting.dictionary")
.CompareMode = vbTextCompare
Application.ScreenUpdating = False
For Each Dn In Rng
    If Not .Exists(DateValue(Dn.Value)) Then
        .Add DateValue(Dn.Value), Dn.Offset(, 1)
    Else
        Set .Item(DateValue(Dn.Value)) = Union(.Item(DateValue(Dn.Value)), Dn.Offset(, 1))
    End If
Next
Range("E1:H1") = Array("Date", "Max", "Min", "Average")
c = 1
For Each K In .keys
    c = c + 1
    Cells(c, "E") = K
    Cells(c, "F") = Application.Max(.Item(K))
    Cells(c, "G") = Application.Min(.Item(K))
    Cells(c, "H") = Application.Average(.Item(K))
Next K
End With
Application.ScreenUpdating = True


End Sub

第2列中与第1列中的值相关的最小值/最大值/平均值

1 个答案:

答案 0 :(得分:0)

无论您有多少行数据,“正常”功能都应正常工作。

例如,我只检查了工作表函数MINMAXAVERAGEMINIFSMAXIFSAVERAGEIFS一列200k行,并取决于另一列的值,我没有任何问题(使用Excel for Office 365)。


示例:

Column B的平均值,其中Column A等于2”

工作表功能:

=AVERAGEIFS(B:B, A:A, 2)

VBA WorksheetFunction

MsgBox Application.WorksheetFunction.AverageIfs(Range("B:B"), Range("A:A"), 2)

也许您使用的是旧版Excel?

据我所知,Excel的所有函数/公式都将在该版本可以处理的maximum number of rows/columns范围内正常运行(至少, 1,048,576行×16,384列 Excel 2007)。