中位数多重标准vba

时间:2016-02-23 10:52:10

标签: excel 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验证 我试过这个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

2 个答案:

答案 0 :(得分:0)

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

Sub MedianePro()

Application.ScreenUpdating = False

范围(" J3:L9&#34)。clearContents中

对于Z = 3到9

范围(" j"& Z).FormulaArray = _

" = IFERROR(MEDIAN(IF((C1 = R1C14)(C5 = R2C)(C2 = RC9)*(C6 = R1C13),C7)),#34 ;""")"

范围(" k"& Z).FormulaArray = _

" = IFERROR(MEDIAN(IF((C1 = R1C14)(C5 = R2C)(C2 = RC9)*(C6 = R1C13),C7)),#34 ;""")"

范围(" l"& Z).FormulaArray = _

" = IFERROR(MEDIAN(IF((C1 = R1C14)(C5 = R2C)(C2 = RC9)*(C6 = R1C13),C7)),#34 ;""")"

下一个Z

Application.ScreenUpdating = True

End Sub

度过愉快的一天

答案 1 :(得分:0)

不了解速度,但您可以尝试以下

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