weniger streng
17.07.2012 09:23:31
Erich
Hi Erhard,
wenn ich das recht verstehe, braucht man in meinen Rooutinen nur die Teile mit anz() wegzulassen.
Ich habe Testeingabe und Ausgabe mal ins Tabellenblatt verlagert:
Sub test4()
Dim w As Long, zz As Long
For zz = 2 To 8
w = Cells(zz, 1)
Cells(zz, 2) = DreiIn5(w)
Cells(zz, 3) = TriIn5(w)
Cells(zz, 4) = Tre(w)
Next zz
End Sub
Function DreiIn5(ByVal lngZ As Long) As Boolean
Dim ii As Integer, qu(5) As Integer, ar(3) As Integer ', anz(3) As Integer
For ii = 1 To 5
qu(ii) = Fix(lngZ / 10 ^ (5 - ii))
lngZ = lngZ - 10 ^ (5 - ii) * qu(ii)
Next ii
For ii = 1 To 5
If ar(qu(ii)) > 0 And (Abs(ar(qu(ii)) - ii)) > 1 Then Exit Function
ar(qu(ii)) = ii
' If anz(qu(ii)) > 1 Then Exit Function
' anz(qu(ii)) = anz(qu(ii)) + 1
Next ii
If ar(1) * ar(2) * ar(3) = 0 Then Exit Function
DreiIn5 = True
End Function
Function TriIn5(ByVal lngZ As Long) As Boolean
Dim ii As Integer, ar(3) As Integer ', anz(3) As Integer
For ii = 1 To 5
' If anz(Mid(lngZ, ii, 1)) > 1 Then Exit Function
' anz(Mid(lngZ, ii, 1)) = anz(Mid(lngZ, ii, 1)) + 1
If ar(Mid(lngZ, ii, 1)) > 0 And _
Abs(ar(Mid(lngZ, ii, 1)) - ii) > 1 Then Exit Function
ar(Mid(lngZ, ii, 1)) = ii
Next ii
If ar(1) * ar(2) * ar(3) = 0 Then Exit Function
TriIn5 = True
End Function
Function Tre(ByVal z As Long) As Boolean
Dim q$
q = CStr(z)
If InStr(q, 1) 0 And InStr(q, 2) 0 And InStr(q, 3) 0 Then
If (InStr(q, 11) 0 And InStr(q, 22) 0) Or _
(InStr(q, 11) 0 And InStr(q, 33) 0) Or _
(InStr(q, 33) 0 And InStr(q, 22) 0) Then
Tre = True
End If: End If
End Function
Das kommt jetzt dabei raus:
| A | B | C | D |
1 | Zahl | Erg1 | Erg2 | Erg3 |
2 | 22332 | FALSCH | FALSCH | FALSCH |
3 | 11113 | FALSCH | FALSCH | FALSCH |
4 | 21123 | FALSCH | FALSCH | FALSCH |
5 | 22333 | FALSCH | FALSCH | FALSCH |
6 | 11123 | WAHR | WAHR | FALSCH |
7 | 33122 | WAHR | WAHR | WAHR |
8 | 32221 | WAHR | WAHR | FALSCH |
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich