2

我是访问和 VBA 的新手。我有一个用来计算中位数的函数。当前函数充当域函数,并使用所有数据来计算中位数,而不是构成查询/报告其余部分的数据集。我想知道如何修改此代码或更好的方法来找到用于创建报告的数据集的中位数。

Option Compare Database 
Option Explicit 



Function DMedian(tName As String, fldName As String) As Single 
  Dim MedianDB As DAO.Database 
  Dim ssMedian As DAO.Recordset 
  Dim RCount As Integer, i As Integer, x As Double, y As Double, _ 
      OffSet As Integer 
  Set MedianDB = CurrentDb() 
  Set ssMedian = MedianDB.OpenRecordset("SELECT [" & fldName & _ 
            "] FROM [" & tName & "] WHERE [" & fldName & _ 
            "] IS NOT NULL ORDER BY [" & fldName & "];") 
  'NOTE: To include nulls when calculating the median value, omit 
  'WHERE [" & fldName & "] IS NOT NULL from the example. 
  ssMedian.MoveLast 
  RCount% = ssMedian.RecordCount 
  x = RCount Mod 2 
  If x <> 0 Then 
     OffSet = ((RCount + 1) / 2) - 2 
     For i% = 0 To OffSet 
        ssMedian.MovePrevious 
    Next i 
    DMedian = ssMedian(fldName) 
 Else 
     OffSet = (RCount / 2) - 2 
     For i = 0 To OffSet 
        ssMedian.MovePrevious 
     Next i 
     x = ssMedian(fldName) 
     ssMedian.MovePrevious 
     y = ssMedian(fldName) 
     DMedian = (x + y) / 2 
  End If 
  If Not ssMedian Is Nothing Then 
     ssMedian.Close 
     Set ssMedian = Nothing 
  End If 
  Set MedianDB = Nothing 
End Function 
4

1 回答 1

0

如果您指的是根据您创建的自定义报告计算中位数,那么只需保存您的查询并将查询名称传递给“tname”而不是表名。

于 2011-12-13T19:15:05.483 回答