中位数多个标准vba

我用多个标准来计算中位数,计算速度很慢,我想用vba来计算,因为计算可能会更快。

我把它连接起来的练习只是一个例子。 执行缓慢是我的真实文件,其中包含11个提供和超过3千行。

计算公式:

IFERROR(MEDIAN(IF(($A$2:$A$44=$N$1)*($E$2:$E$44=J$2)*($B$2:$B$44=$I3)*($F$2:$F$44=$M$1);$G$2:$G$44));"") 

使用Ctrl + Shift + Enter进行validation我试过这个VBA代码,但它不起作用

 Sub MEDIAN() For Each cell In Range("J3:L9") year = Range("m1") offer = UCase(Range("n1")) month = UCase(Cells(2, cell.Column)) day = UCase(Cells(cell.Row,9)) cell.Value = Application.Evaluate("MEDIAN(IF((" & _ offer & "=R1C14)*(" & _ day & "=RC9)," & _ month & "R2C)," & _ year & "=R1C13)," & _ C7 & "))") Next cell End Sub 

链接是: https : //onedrive.live.com/redir?resid=8952CE5DAEF23B26!122&authkey=!AK_xvd_-saszoGs&ithint=file%2cxlsx

这是我的问题的答案,但这是一个沉重的执行:我不会放弃,直到得到一个快速的。

Sub MedianePro()

Application.ScreenUpdating = False

范围( “J3:L9”)clearContents中。

对于Z = 3至9

范围(“j”&Z).FormulaArray = _

“=”IFERROR(MEDIAN(IF((C1 = R1C14) (C5 = R2C) (C2 = RC9)*(C6 = R1C13),C7)),“”“”)“

范围(“k”&Z).FormulaArray = _

“=”IFERROR(MEDIAN(IF((C1 = R1C14) (C5 = R2C) (C2 = RC9)*(C6 = R1C13),C7)),“”“”)“

范围(“l”&Z).FormulaArray = _

“=”IFERROR(MEDIAN(IF((C1 = R1C14) (C5 = R2C) (C2 = RC9)*(C6 = R1C13),C7)),“”“”)“

下一个Z

Application.ScreenUpdating = True

结束小组

祝你今天愉快

不知道速度,但你可以尝试以下

 Sub MEDIAN() Range("J3:L9").ClearContents With Range("J3") .FormulaArray = "=IFERROR(MEDIAN(IF(($A$2:$A$44=$N$1)*($F$2:$F$44=$M$1)*($E$2:$E$44=J$2)*($B$2:$B$44=$I3),$G$2:$G$44)),0)" .Copy .Offset(, 1).Resize(1, 2) .Copy .Offset(1).Resize(6, 3) End With