Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1336to1340
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
Inhaltsverzeichnis

Neunstellige Zahl prüfen

Neunstellige Zahl prüfen
08.11.2013 14:04:45
alifa
Hi,
Die neunstellige Zahl beinhaltet alle 9 Ziffern(1 bis 9). Die Zahlen sollen geprüft werden auf auf(ab)steigende Sequenzen. Diese werden vorgegeben. Beispiel: Die Zahl
945873216. Die vorgegebenen Sequenzen:45,87,321. Hier sollte die Prüfung WAHR sein. Die Sequenzen sollen in der vorgegebenen Ordnung vorhanden sein. Die Zahl darf keine anderen auf- oder absteigende Sequenzen haben. Die Zahl 912576834 bei vorgegebener Sequenz "12" ist FALSCH, da auch "76" und "34" vorkommt. Die Anzahl der Sequenzen: 0-4.
Anzahl der Ziffern pro Sequenz:2 bis 4. Eine VBA Function wird gesucht. Meine eigenen Versuche sind leider gescheitert. Kann mir jemand helfen?
Gruß, Alifa

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Neunstellige Zahl prüfen
08.11.2013 15:15:41
EtoPHG
Hallo Alifa,
Die Regel:Die Zahl darf keine anderen auf- oder absteigende Sequenzen haben. Die Zahl 912576834 bei vorgegebener Sequenz "12" ist FALSCH, da auch "76" und "34" vorkommt. ist völlig abstrus!
12 ist wohl keine Sequenz, sonder eine einfach Zahl. Was ist ein 0 Sequenz ? Immer wahr?
76 und 34 ? Warum ?
Genausogut könnte ich sagen, dass erste Beispiel ist falsch, weil da nocht 73 und 94 vorkommen!!
Führe alle Regeln konsistent und nicht widersprüchlich auf!
Gruess Hansueli

Hier muss ich Alifa allerdings mal recht ...
08.11.2013 16:19:32
Luc:-?
…Hansueli;
bei genauem Lesen erschließt sich schon, was gemeint ist. ;-]
Damit das 1.Bsp nicht FALSCH wird, ist folglich bei der vorgegebenen Sequenz 3 kaum noch Spielraum für Ergänzungen, wenn man davon ausgeht, dass die vorgegebenen Ziffernfolgen nicht auch noch Bestandteil einer anderen, unerlaubten Sequenz sein dürfen. Wenn das so ist, müssten die erlaubten Sequenzen zuerst durch bspw ein Leerzeichen ersetzt wdn, bevor der Rest geprüft wird. Anderenfalls hättest du recht und das Ganze wäre tatsächlich abstrus. Merkwürdig ist es eh, aber das war ja auch nicht anders zu erwarten. ;-)
Gruß Luc :-?

Anzeige
Merkwürdiges gewürdigt
08.11.2013 21:26:34
Erich
Hi Alifa,
zitat Luc:
"Merkwürdig ist es eh, aber das war ja auch nicht anders zu erwarten. ;-)"
Dem kann ich mich nur anschließen. Wir kennen doch unsere Pappenheimer... ;-)
Hier habe ich mal etwas gebastelt:

Option Explicit
Sub aTest()
Dim zz As Long
For zz = 6 To Cells(Rows.Count, 1).End(xlUp).Row
Cells(zz, 3) = Pruef(Cells(zz, 1), Cells(zz, 2))
Next zz
End Sub
Function Pruef(ByVal qq As String, SQ As String)
' Parameter: qq ist eine neunstellige Zahl aus allen Ziffern 1 bis 9
'            SQ ist ein String mit 0 bis 4 Sequenzen, getrennt duch Komma
'      Bsp.: x = Pruef("945873216", "45,87,321")
'            x = Pruef("945873216", "")
Dim arS, tt As Long, ii As Long, pp As Long, pv As Long
arS = Split(SQ, ",")
For ii = 0 To UBound(arS)
pp = InStr(qq, arS(ii))
If pp = 0 Then Pruef = "Sequenz " & arS(ii) & " fehlt": Exit Function
If pp  0 Then Exit For
Next ii
If ii > UBound(arS) Then Pruef = "Sequenz " & Mid(qq, tt - 1, 2) & _
" nicht vorgegeben": Exit Function
End If
Next tt
Pruef = True
End Function
Da kommt das hier raus:
 ABC
1912586437 Sequenz 12 nicht vorgegeben
291257683412,76Sequenz 34 nicht vorgegeben
394587321687,45Sequenz 45 zu weit links
494587321645,87,321WAHR
597531864278Sequenz 78 fehlt
6123975864123,78Sequenz 78 fehlt
7975318642 WAHR
894587321645,87,32Sequenz 21 nicht vorgegeben

Die Fehlerhinweise in Sp. C kann man auch einfach im Code durch False ersetzen.
Oder man deklariert die Fkt. Pruef als Boolean, dann kommt automatisch False raus mit dem Exit.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Merkwürdiges gewürdigt
09.11.2013 10:29:15
alifa
Hi Erich,
Endlich ein vernünftiger Beitrag! Deine Funktion passt genau und ist recht schnell. Hatte mittlerweile auch etwas gebastelt, aber Deine Lösung ist bedeutend besser. Ein schönes Wochenende!
Erhard

Auch schönes Wochenend! Danke für Rückmeld.! (owT)
09.11.2013 11:11:29
Erich

AW: Auch schönes Wochenend! Danke für Rückmeld.! (owT)
09.11.2013 12:07:31
alifa
Hallo Erich
Noch eine kurze Frage:Was bedeuten die beiden Minus Zeichen in der Zeile If Abs(--Mid.....?
Erhard

-- => 1* - Vernunft ist relativ! :-> owT
09.11.2013 15:16:54
Luc:-?
:-?

Doppelminus
09.11.2013 17:37:05
Erich
Hi Erhard,
deine Frage nach Sinn und Zweck des Doppelminus in dem If-Ausdruck ist nícht völlig unberechtigt! ;-)
Es ist hier nämlich gänzlich überflüssig.
Es ist nur ein Relikt aus einer Vorversion. Ich hatte da so etwas stehen wie
If --Mid(qq, tt - 1, 1) = Mid(qq, tt, 1) + 1 Then
Hier hatte "--" eine Bedeutung:
Mid(qq, tt - 1, 1) ist ein Text,
Mid(qq, tt, 1) + 1 ist eine Zahl (Der Mid-Text wird wegen/vor Addition der 1 in eine Zahl konvertiert.)
Damit nun nicht Text mit Zahl verglichen wird, hatte ich mit
--Mid(qq, tt - 1, 1) auch aus dieser Seite der Gleichung eine Zahl gemacht.
In der jetzigen Version ist das unnötig, denn mit
If Abs(Mid(qq, tt - 1, 1) - Mid(qq, tt, 1)) = 1 Then
werden für die Subtraktion beide Mid's in Zahlen konvertiert.
Grüße aus Kamp-Lintfort von Erich und: Schönes Wochenende!

Anzeige
AW: Doppelminus
09.11.2013 22:55:01
alifa
Hi Erich,
Vielen herzlichen Dank für die elegante Lösung dieser, wie ich meine, nicht ganz einfachen Aufgabe.
Viele Grüße aus dem Oberbergischen
Erhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige