Kommentierte UDF EinserGruppen(1er und 2er)
04.12.2012 10:36:02
NoNet
Hallo Alifa,
ich habe die UDF etwas ausführlicher kommentiert, vielleicht wird die Funktionsweise damit klarer :
Public Function EinserGruppen(s As String, z1 As Byte, z2 As Byte, z3 As Byte) As Boolean
'03.12.2012, NoNet - www.excelei.de
Dim Einser As Byte, Zweier As Byte, Gruppen As Byte, intI As Integer, bolTemp As Boolean
'Hier wird geprüft, ob die Anzahl der 1en stimmt :
'wenn man von der Länge des Gesamt-Strings die Länge des Strings ohne die 1en abzieht,
'muss genau z1 resultieren, also die gewünschte Anzahl der 1en
'Beispiel : "1122212" = Länge 7, ohne die 1en ("2222") = Länge 4 => Differenz 3
bolTemp = Len(s) - Len(Replace(s, "1", "")) = z1
'Falls die Anzahl der 1en korrekt (=z1) ist, hier weitermachen :
If bolTemp Then
'Hier wird geprüft, ob die Anzahl der 2en stimmt :
'wenn man von der Länge des Gesamt-Strings die Länge des Strings ohne die 2en abzieht,
'muss genau z2 resultieren, also die gewünschte Anzahl der 2en
'Beispiel : "1122212" = Länge 7, ohne die 2en ("111") = Länge 3 => Differenz 3
bolTemp = Len(s) - Len(Replace(s, "2", "")) = z2
'Falls die Anzahl der 2en korrekt (=z2) ist, hier weitermachen :
If bolTemp Then
'Hier wird in einer Schleife (Zeichen für Zeichen) geprüft,
'ob eine neue 1er-Gruppe beginnt
'das ist dann der Fall, wenn es das erste Zeichen ="1" ist oder wenn
'das vorhergehende Zeichen KEINE "1" war, aber das aktuelle Zeichen
For intI = 1 To Len(s)
If Mid(s, intI, 1) = "1" Then
If Einser = 0 Then
Einser = 1
Else
If Mid(s, intI - 1, 1) "1" Then
Einser = Einser + 1
End If
End If
End If
Next
'wenn die Anzahl der Einsergruppen = z3 ist, ist bolTemp=TRUE, ansomnsten FALSE
bolTemp = Einser = z3
End If
End If
'Das Ergebnis der Funktion EinserGruppen() entspricht bolTemp (TRUE oder FALSE)
EinserGruppen = bolTemp
End Function
Gruß, NoNet