【问题标题】:Calculating the median of data where some values contain "<"计算某些值包含“<”的数据的中位数
【发布时间】:2014-04-15 13:25:11
【问题描述】:

我需要计算一组测量值的中位数,其中在某些情况下测量了一个值,在某些情况下该值低于检测值(用“

以下是我遇到的一些案例示例:

2.0; 3.0; 中位数 = 2.5
1.0; 中位数 = 1.0; 1.0; 中位数 =

我对在 excel VBA 中执行此操作有点难过。
如何在跟踪“

非常感谢任何输入 - 谢谢!

【问题讨论】:

  • 一种方法是将修饰符与数字分开到单独的列中,然后仅对数字进行数学运算。否则,您可以编写一个 VBA 函数来进行计算,该计算将去除修饰符,然后将它们重新添加到最终计算中。

标签: vba excel


【解决方案1】:

这是我使用的东西:

Public Function DoAvg(rng As Range)
  DoAvg = Parse(rng, "Average")
End Function

Public Function DoMedian(rng As Range)
  DoMedian = Parse(rng, "Median")
End Function


'This does the work...
Private Function Parse(rng As Range, CalcType As String)

Dim rv, arr() As Single, mods As String, i As Long
Dim c As Range
Dim tmp, m

  For Each c In rng.Cells
    tmp = Replace(Trim(c.Value), " ", "")
    If tmp Like "<*" Or tmp Like ">*" Then
        m = Left(tmp, 1)
        If Not InStr(mods, m) > 0 Then mods = mods & m
        tmp = Right(tmp, Len(tmp) - 1)
    End If

    If IsNumeric(tmp) And tmp <> "" Then
      i = i + 1
      ReDim Preserve arr(1 To i)
      arr(i) = tmp
    End If
  Next c

  If i > 1 Then
      rv = CallByName(Application.WorksheetFunction, CalcType, VbGet, arr)
      Parse = IIf(mods <> "", mods, "") & rv
  Else
      Parse = ""
  End if

End Function

【讨论】:

  • @brettdj - 我认为这是原始问题中的错字。所有这些组都至少有一个修饰符。
猜你喜欢
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 2015-10-13
  • 2021-07-30
  • 2018-12-04
  • 2018-07-14
  • 2021-12-28
  • 2010-09-27
相关资源
最近更新 更多