Heb je een serie getallen opgeslagen in een array en wil je snel zien welke getallen het vaakst voorkomen? Met de onderstaande functie kun je deze informatie ophalen. Deze functie geeft ook een array terug als output. De reden hiervoor is dat het ook mogelijk is dat er meerdere getallen zijn die in een array die het meest kunnen voorkomen.
De uitdaging bij deze functie is dat je een array vult in een functie die dezelfde naam heeft. Je kunt in dit geval niet direct een element toevoegen aan de ‘output’ array. VBA denkt dan namelijk dat de functie binnen de functie opnieuw aangeroepen wordt. We hebben dat opgelost door de output in een andere array op te slaan en uiteindelijk de gehele inhoud van de array toe te wijzen aan de ‘output’ array.
Public Function GetalVaakstVoorArray(Getallenlijst() As Integer) As Integer()
Dim GetalVaakstVoorArray2() As Integer
'---------------bepalen wat de hoogste frequentie is dat een getal uit de array voorkomt
For i = 0 To UBound(Getallenlijst)
aantal = 0
For j = 0 To UBound(Getallenlijst)
getal1 = Getallenlijst(i)
getal2 = Getallenlijst(j)
If getal1 = getal2 Then
aantal = aantal + 1
End If
Next j
If aantal > hoogsteAantal Then
hoogsteAantal = aantal
End If
Next i
'-------------Hier koppelen we deze hoogste frequentie weer terug aan de getallen en plaatsen die in output array
For i = 0 To UBound(Getallenlijst)
aantal = 0
Slaover = ""
For j = 0 To UBound(Getallenlijst)
getal1 = Getallenlijst(i)
getal2 = Getallenlijst(j)
If getal1 = getal2 Then
aantal = aantal + 1
End If
Next j
If aantal = hoogsteAantal Then
If eerstVullingArray <> "done" Then
InhoudGetalVaakstVoorArray = 0
Else '----Als de array al inhoud heeft kijken we of het getal er al in staat.
For j = 0 To UBound(GetalVaakstVoorArray2)
If GetalVaakstVoorArray2(j) = Getallenlijst(i) Then
GoTo Slaover
End If
Next j
InhoudGetalVaakstVoorArray = UBound(GetalVaakstVoorArray2) + 1
End If
ReDim Preserve GetalVaakstVoorArray2(InhoudGetalVaakstVoorArray)
GetalVaakstVoorArray2(InhoudGetalVaakstVoorArray) = Getallenlijst(i)
eerstVullingArray = "done"
End If
Slaover:
Next i
GetalVaakstVoorArray = GetalVaakstVoorArray2
End Function
Zo kun je de bovenstaande functie aanroepen. In dit voorbeeld gebruik ik een array met 5 elementen waarvan de getallen 1 en 4 het meest voorkomen. Zoals je kunt zien in het onderstaande lokal var. scherm is dit ook de uitkomst van de functie.
Sub Getallen()
Dim Getallenlijst(4) As Integer
Getallenlijst(0) = 1
Getallenlijst(1) = 1
Getallenlijst(2) = 3
Getallenlijst(3) = 4
Getallenlijst(4) = 4
Getal = GetalVaakstVoorArray(Getallenlijst())
End Sub
