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 に答える