MEDIAIFS()在Excel VBA中

目前我正在教自己的VBA,有一件事情真的让我感到困惑,就是Excel没有MEDIANIFS()函数。 我的研究发现:

  • VBA中的MEDIANIF(一个条件,不是多个)公式
  • {MEDIAN(IF(…))}的数组公式
  • 将中位数置于数据透视表中

PS。 这不是自学,所以发布解决scheme是好的,但提示也是受欢迎的

编辑版本:

我的问题是,由于我有一个VBA编程的MEDIANIF()公式,我怎样才能修改它以采取多个条件? 把它变成一个MEDIANIFS()

> Function MedianIf(rng As Range, Criteria As Variant) As Variant > Dim cell As Range > Dim ar() As Variant > Dim i As Long > > With WorksheetFunction > If .CountIf(rng, Criteria) = 0 Then > MedianIf = CVErr(2036) '-- #NUM! > Else > ReDim ar(1 To rng.Cells.Count) > For Each cell In rng.Cells > If .CountIf(cell, Criteria) = 1 Then > i = i + 1 > ar(i) = cell.Value > End If > Next > MedianIf = .Median(ar) > End If > End With End Function 

资料来源: http : //www.vbforums.com/showthread.php?650584-RESOLVED-Writing-MedianIf-in-VBA

您可以使用参数数组来包含多个条件。 给你一个机制的概念:

 Sub MultiCriteria(target As Range, ParamArray Criteria() As Variant) Dim s As String Dim i As Long Dim criterion As Variant s = target.Address & " to be filtered by:" For i = LBound(Criteria) To UBound(Criteria) criterion = Criteria(i) s = s & vbCrLf & "Criterion " & i & ": " & criterion Next i Debug.Print s End Sub Sub test() MultiCriteria Range("A1:B10"), "<5", "<>6", "=C5" End Sub 

testing输出:

 $A$1:$B$10 to be filtered by: Criterion 0: <5 Criterion 1: <>6 Criterion 2: =C5 

您可以使用AND()将条件收集到1中,也可以在循环中应用条件。 我现在没有时间去开发一个完整的MEDIANIF实现,但这应该让你开始。 如果遇到更多的困难,请提出另一个问题。

我认为你的2个选项是VBA中的数组公式(在No2中build议)或用户定义的函数(UDF),但是你没有给我们太多的帮助。 也许一些样本数据和预期的输出可能会帮助社区更多?

谢谢,Ojf

编辑:这可能有助于数组公式的方法以及… http://www.mrexcel.com/forum/excel-questions/535743-median-ifs.html