2011-12-13 3 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 & _ "] NOT NULL ORDER BY [ "& fldName & "];") – user1096276

+0

수신중인 오류 메시지는 무엇입니까 "qrysearch"라는 쿼리에 매개 변수 쿼리가없는 것을 알았습니까? –

+0

매개 변수 쿼리라고 생각합니다. field는 LIKE를 사용하여 양식의 텍스트 상자 값을 찾습니다. 오류는 너무 적은 매개 변수입니다. – user1096276