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
興味深い回答、Matt。私はその角度からそれについては決してありません。私は、レポートがオフに基づいているクエリを使用しようとしました。 Dmedian( "qrySearch"、 "SoldPrice")レポート自体は同じクエリに基づいています。このコード部分でエラーが発生します。Set ssMedian = MedianDB.OpenRecordset( "SELECT ["&fldName&_ "] FROM ["&tName& "] WHERE ["&fldName&_ "] IS NOT NULL ORDER BY ["&fldName & "];"] – user1096276
受信したエラーメッセージは何ですか "qrysearch"と呼ばれていますが、パラメータクエリではありませんか? –
これはパラメータクエリと考えています。フィールドは、LIKEを使用してフォーム内のテキストボックスの値を見つけます。エラーは少なすぎます。 – user1096276