Rubrik: VBA Allgemein | VB-Versionen: VBA | 10.04.15 |
VBA-Funktionen #1, bestimmte Funktionen zur Array-Verwendung Der Tipp zeigt mehrere einfache Funktionen, die bei der Verwendung von Arrays benutzt werden können. | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 8.712 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
In diesem Beitrag zeige ich verschiedene Funktionen zur Verwendung bei der Nutzung von Arrays.
Nachfolgende Funktionen sind gewissermaßen Bestandteil von auf diesen Tipp folgenden weiteren Tipps. Ich zeige sie sozusagen im Voraus. Die Funktionen sind ziemlich selbsterklärend bei der Beschreibeung ihrer Parameter.' Nachbildung der Verweisfunktion aus Excel ' Suchkriterium: der Wert, der in einem Feld gesucht wird ' Suchvektor: das Feld, in dem der Wert gesucht wird ' Ergebnisvektor: das Feld, in dem die positionsbezogenen Rückgabewerte ' enthalten sind ' Rückgabe: der Wert, der aus dem Ergebnisfeld ermittelt wurde Public Function VerweisFKT(Suchkriterium As Variant, _ Suchvektor As Variant, _ Ergebnisvektor As Variant) As Variant VerweisFKT = Ergebnisvektor(caIndexOf(Suchvektor, Suchkriterium)) End Function
' Zirka Index
' theArray: das Feld, in dem der Wert gesucht werden soll
' v: der Wert, der gesucht werden soll (zwischen zwei Werten liegend)
' Rückgabe: der \"ungefähre\" Index des Werts im Feld
Private Function caIndexOf(theArray As Variant, v As Variant) As Integer
Dim i As Integer
For i = 1 To UBound(theArray) - 1
If v >= theArray(i - 1) And v < theArray(i) Then
caIndexOf = i - 1
Exit For
End If
Next
End Function
' Suchkriterium: der Wert, nach dem summiert werden soll ' Bereich: das Feld, in dem der Wert, eventuell mehrfach) enthalten ist ' SummeBereich: das Feld mit den zu summierenden Werten, ' positionsbezogen zu Bereich ' Rückgabe: die ermittelte Summe Public Function SummeWenn(Suchkriterium As Variant, _ Bereich As Variant, _ SummeBereich As Variant) As Variant Dim i As Integer, j As Integer, summe As Single For i = 0 To UBound(Bereich) - 1 j = indexOfArr(Bereich, Suchkriterium, j + 1) If j <= 0 Then Exit For summe = summe + SummeBereich(j) Next SummeWenn = summe End Function
' Nachbildung der ZählenWenn-Funktion aus Excel ' Suchkriterium: der Wert, der gezählt werden soll ' Suchvektor: das Feld, in dem der Wert gesucht werden soll ' Rückgabe: die ermittelte Anzahl Public Function ZaehlenWenn(Suchkriterium As Variant, _ Suchvektor As Variant) As Variant Dim i As Integer, j As Integer, zahl As Integer For i = 0 To UBound(Suchvektor) - 1 j = indexOfArr(Suchvektor, Suchkriterium, j + 1) If j <= 0 Then Exit For zahl = zahl + 1 Next ZaehlenWenn = zahl End Function
' Ermitteln des Index eines Feldelements ' theArray: das Feld ' v: der Wert, dessen Position im Feld gesucht wird ' begI: Feldindex, bei dem mit der Suche begonnen werden soll ' Rückgabe: der Index des Wertes im Feld Public Function indexOfArr(theArray As Variant, v As Variant, _ Optional begI As Integer) As Integer Dim i As Integer indexOfArr = -1 If IsMissing(begI) Then begI = 0 For i = begI To UBound(theArray) - 1 If theArray(i) = v Then indexOfArr = i Exit For End If Next i End Function
' Prüfen, ob ein Wert in einem Array enthalten ist ' theArray: das Feld in dem gesucht wird ' valueToFind: der zu suchende Wert ' comp: Vergleichsoperator (binary, text) Public Function IsInArray(theArray As Variant, valueToFind As Variant, _ Optional comp As Integer = 1) As Boolean IsInArray = (UBound(Filter(theArray, valueToFind, , comp)) > -1) End Function