2011-12-13 9 views
2

私はアクセスとVBAの初心者です。私は中央値を計算するために使用する関数を持っています。現在の関数はドメイン関数として機能し、残りのクエリ/レポートを構成するデータセットではなく、すべてのデータを使用して中央値を計算します。このコードを変更する方法や、レポートを作成するために使用されるデータセットの中央値を見つけるためのより良いアプローチを知りたいと思います。データセットのメディアンのためのアクセスにおけるベスト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 

答えて

0

あなたが作成したカスタムレポートに対して中央値を計算することに言及している場合は、単にあなたのクエリを保存し、代わりに、テーブル名の「TNAME」にして、クエリ名を渡します。

+0

興味深い回答、Matt。私はその角度からそれについては決してありません。私は、レポートがオフに基づいているクエリを使用しようとしました。 Dmedian( "qrySearch"、 "SoldPrice")レポート自体は同じクエリに基づいています。このコード部分でエラーが発生します。Set ssMedian = MedianDB.OpenRecordset( "SELECT ["&fldName&_ "] FROM ["&tName& "] WHERE ["&fldName&_ "] IS NOT NULL ORDER BY ["&fldName & "];"] – user1096276

+0

受信したエラーメッセージは何ですか "qrysearch"と呼ばれていますが、パラメータクエリではありませんか? –

+0

これはパラメータクエリと考えています。フィールドは、LIKEを使用してフォーム内のテキストボックスの値を見つけます。エラーは少なすぎます。 – user1096276

関連する問題