'*******************************************************************************

'* Percentil

'* Calcula el Percentil correspondiente al valor pasado como parámetro sngValor.

'  De acuerdo con el DRAE: "Valor que divide un conjunto ordenado de datos estadísticos

'  de forma que un porcentaje de tales datos sea inferior a dicho valor. Así, un

'  individuo en el percentil 80 está por encima del 80% del grupo a que pertenece"

'* Argumentos: -->sngValor: Dato para el que se quiere conocer el Percentil

'              -->strCampo: Campo que contiene los datos que constituyen la "poblacion"

'                           con la que compararemos, normalmente el nombre del campo que

'                           contenga el valor de sngValor

'              -->strTabla: Nombre de la Tabla o consulta que contiene strCampo

'              -->strCondicion: Una condición escrita sin el WHERE pero con la misma sintaxis

'                               Es opcional, solo para el caso de que se quiera filtrar  el

'                               conjunto de datos contenidos en strCampo

'* uso: Percentil(8.2, "Calificacion", "tblCalificaciones", "Curso = '1'")

'       Percentil([calificacion]; "Calificacion"; "TblCalificaciones"; "Curso = '1'")

'       No olvide encerrar entre corchetes los nombres de objetos que contengan espacios

'       en blanco (“[tabla calificaciones]”, por ejemplo)

'* Marciano Almohalla 11/12/2006 21:04

'*******************************************************************************

 

Function Percentil(sngValor As Single, strCampo As String, strTabla As String, Optional strCondicion As String) As Variant

    Dim strCondicion2 As String, _

        sngTotalReg As Long, _

        sngMenorValor As Long

   

On Error GoTo Percentil_TratamientoErrores

 

    'Construimos el criterio a utilizar para contar los registros inferiores a sngValor

    If strCondicion = "" Then 'Si no se ha especificado parámetro strCondicion

        strCondicion2 = BuildCriteria(strCampo, dbSingle, " < " & sngValor)

    Else 'Si se ha especificado el parámetro strCondicion

        strCondicion2 = strCondicion & " AND " & BuildCriteria(strCampo, dbSingle, " < " & sngValor)

    End If

   

    'Calculamos el total de registros

    sngTotalReg = IIf(strCondicion = "", DCount(strCampo, strTabla), DCount(strCampo, strTabla, strCondicion))

    'Calculamos los registros menores que sngValor

    sngMenorValor = DCount(strCampo, strTabla, strCondicion2)

   

    'Calculamos el percentil. Si se desea mostrar en formato porcentaje, se debe dar

    'dicho formato al control en el que se mostrará

    Percentil = Format(sngMenorValor / sngTotalReg, "Percent")

Percentil_Salir:

    On Error GoTo 0

    Exit Function

  

Percentil_TratamientoErrores:

 

    MsgBox "Error " & Err.Number & " en proc.: Percentil de Módulo: mdlPercentil (" & Err.Description & ")"

    Resume Percentil_Salir

 

End Function