Menu Sluiten

Welk getal komt het vaakst voor in een array?

Functies vba excel macro

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

Heeft dit artikel je geholpen?

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *