我的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列中的值相关的最小值/最大值/平均值
答案 0 :(得分:0)
无论您有多少行数据,“正常”功能都应正常工作。
例如,我只检查了工作表函数MIN
,MAX
,AVERAGE
,MINIFS
,MAXIFS
和AVERAGEIFS
一列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)。