Ga naar inhoud

Aanbevolen berichten

Geplaatst:

Ik ben bezig met het maken van een functie in VBA voor het berekenen van een WINSOR-gemiddelde van een aantal getallen.

De functie dit ik heb geschreven ziet er als volgt uit:

 

Function WINGEMIDD(bereik As String, p As Integer) As Integer

   n = Application.Range(bereik)
   r = p * n
   t = Application.Floor(r)
   
   For a = 1 To t
   x1 = Application.Small(bereik, a)
   x2 = Application.Large(bereik, a)
   x2 = x3 + x1 + x2
   Next
   
   x4 = Application.Sum(bereik)
   x5 = Application.Small(bereik, t + 1)
   x6 = Application.Large(bereik, t + 2)
   x7 = 1 / n
   
   WINGEMIDD = x7 * (x4 - x2 + t * (x5 + x6))
End Function
 

Als uitkomst krijg ik steeds #WAARDE!

 

Hoe moet ik deze functie aanpassen opdat ik de juiste waarde krijg

 

  • 2 weken later...
Geplaatst:

Aangezien er weinig animo is voor deze thread.

 

Function winsorize(bereik As Range, p As Integer) As Double
    r = Application.CountA(bereik): k = r * (p / 100)
    t = Fix(k): If t <> k Then t2 = Round(1 - (k - t), 2)
    If t2 = 0 Then
        For i = t + 1 To r - t
            X = X + Application.Small(bereik, i)
        Next
    Else
        For i = t + 2 To r - (t + 1)
            X = X + Application.Small(bereik, i)
        Next
        X = X + (t2 * Application.Small(bereik, t + 1)) + (t2 * Application.Small(bereik, r - t))
    End If
    winsorize = (1 / (r - (2 * k))) * X
End Function

 

In het werkblad invoeren als

=winsorize(A1:A10;22)

 

×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.