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

Posted

技术标签:

【中文标题】从大型数据集中提取最小/最大/平均数据的宏【英文标题】:Macro to extract min/max/average data from large data set 【发布时间】:2019-04-19 09:53:21 【问题描述】:

我的 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 列中的值相关的值的最小值/最大值/平均值

【问题讨论】:

我的答案是below;我假设“正常”是指工作表函数? ...如果功能无法正常运行,您能否提供更多信息?你有错误吗? 您希望得到什么输出作为最终结果?如果您只想包含特定列与特定值匹配的行,则使用 AVERAGEIFS 作为工作表函数或在 VBA 中(答案中的示例),或者如果您想要显示 all 的报告 组合,听起来您正在寻找pivot table 抱歉,我对技术术语不太了解,我认为 iv 设法让它与数据透视表一起使用。谢谢你的回复,你真的很有帮助 【参考方案1】:

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

例如,我只是仔细检查了工作表函数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(至少从 Excel 2007 开始,即 1,048,576 行 x 16,384 列 )。

【讨论】:

以上是关于从大型数据集中提取最小/最大/平均数据的宏的主要内容,如果未能解决你的问题,请参考以下文章

从大型数据集中采样

如何从给定的计数、平均值、标准差、最小值、最大值等生成数据集?

G

需要帮助从 R 中的 .nc 数据集中提取仅一年的数据

如何从 cvs 连续数据集中计算平均值/最小值?

如何从 pandas 数据框中的大型每日 JSON 数据集计算平均月值?