Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1276to1280
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Zahl mit Makro prüfen
Alifa
Hallo,
die Zahlen sind 6- bis 9-Stellig. Sie beinhalten die Basis-Ziffern(BZ)1 und 2 und die "Füllziffer"(FZ) 3. Die BZ
stehen direkt nebeneinander, also keine FZ dazwischen. Gleiche BZ müssen von mindestens einer FZ getrennt werden. Die Beispiele sind für 7-stellige Zahlen. 1212332 ist WAHR. 1212331 ist FALSCH, weil die letzte 1 nicht direkt neben der 2 liegt. 3223132 ist FALSCH. Die Sequenzen 22, 231, 132 sind nicht erlaubt. auch 1333332 ist FALSCH, weil die 2 nicht direkt an der 1 liegt. Ich habe versucht das mit If InStr(zahl,22)=0 and InStr(zahl,11)=0 and....Then Funktion=True. Es gibt eine große Menge solcher Sequenzen. Ich hoffe, es wird eine bessere Lösung gefunden.
Gruß, Alifa

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zahl mit Makro prüfen
13.09.2012 08:25:23
Alifa
Guten Morgen,
mittlerweile habe ich die Funktion selber gebastelt. Falls noch jemand dran ist: 1333333, 3331333, 2333333,.... sind WAHR. Auch 3333333 ist WAHR.
Gruß, Alifa

AW: Zahl mit Makro prüfen
13.09.2012 09:22:14
Dirk
Zeig doch mal dein Ergebniss
Gruß
Drik

AW: Zahl mit Makro prüfen
13.09.2012 10:49:53
Alifa
Hier die Funktion

Private Function Nah(ByVal s As String) As Boolean
Dim str As String
If InStr(s, 11) = 0 And InStr(s, 22) = 0 Then
Nah = True
str = Replace(Replace(Replace(Replace(s, 33333, 3), 3333, 3), 333, 3), 33, 3)
If InStr(str, 132) > 0 Or InStr(str, 231) > 0 Then Nah = False
End If
End Function

Gruß, Alifa

Anzeige
AW: Zahl mit Makro prüfen
13.09.2012 14:30:27
Dirk
Wenn ich dich richtig verstanden habe bringt dr die Function das glecihe ergebniss
Gruß
Drik

Sub test()
MsgBox pruefziffer("1331333")
End Sub
Private Function pruefziffer(zahl As Long) As Boolean
Dim ii As Integer, tmp As Integer, zz As Long
zz = zahl
pruefziffer = True
For ii = 1 To Len(zahl)
If Right(Left(zahl, ii), 1) = 3 Then GoTo ne
If Right(Left(zahl, ii), 1) = tmp Then
pruefziffer = False
Exit Function
Else
tmp = Right(Left(zahl, ii), 1)
End If
ne:
Next ii
End Function

AW: Zahl mit Makro prüfen
13.09.2012 20:56:51
Alifa
Deine Funktion gibt bei deinem Beispiel:FALSCH. Meine gibt WAHR. Tatsächlich ist Die Zahl korrekt, da zwischen den beiden BZ zwei FZ sind. 1332333 ist FALSCH, weil die in der Sequenz folgenden BZ nicht direkt nebeneinander sind. Außerdem ist deine Funktion etwa 8 Mal langsamer.
Vielleicht versuchst du, sie schneller zu gestalten und sie bringt das gleiche Ergebnis wie meine Vorlage. Danke für deine bisherige Hilfe, vielleicht geht es noch besser!
Gruß, Alifa

Anzeige
zwei Vorschläge
15.09.2012 13:34:13
Erich
Hi Erhard,
hier zwei weitere Vorschläge - der 1. ist eine Abwandlung deiner Fkt, die vielleicht ein wenig schneller ist,
die 2. arbeitet mit RegExp (weitgehend ungetestet!). Schaust du, was wie schnell ist?

Function Nah2(s As String) As Boolean
Dim str As String
If InStr(s, "11") > 0 Then Exit Function
If InStr(s, "22") > 0 Then Exit Function
str = Replace(Replace(Replace(Replace(s, _
"33333", "3"), "3333", "3"), "333", "3"), "33", "3")
If InStr(str, "132") > 0 Then Exit Function
If InStr(str, "231") > 0 Then Exit Function
Nah2 = True
End Function
Public Function IsOK(strName As String) As Boolean
Dim objRegExp As Object
Set objRegExp = CreateObject("vbscript.regexp")
With objRegExp
.Global = True
.Pattern = "11|22|13+2|23+1"
IsOK = Not .test(strName)
End With
Set objRegExp = Nothing
End Function
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich und: Schönes Wochenende!

Anzeige
AW: zwei Vorschläge
15.09.2012 20:08:13
Alifa
Hallo Erich,
die verbesserte Funktion(Nah2) ist etwa 20% schneller(492 Sekunden). Die 2.(IsOk) ist bedeutend langsamer. Braucht etwa genau so lang(609 Sek), wie meine(Nah) bis ein Wert berechnet ist. Nach einer halben Stunde habe ich abgebrochen. Danke für deinen Beitrag!Schönes Wochenende! Erhard

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige