【问题标题】: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 设法让它与数据透视表一起使用。谢谢你的回复,你真的很有帮助

标签: excel vba


【解决方案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 列 )。

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多