Anzeige
Archiv - Navigation
1572to1576
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

Zeichenkette prüfen mit VBA

Zeichenkette prüfen mit VBA
19.08.2017 07:48:48
Alifa
Guten Morgen,
die zehnstellige Zeichenkette beinhaltet die Zahlen 1 bis 16 und den Buchstaben x, der die Zahlen trennt. Die Größe der Zahlen steigt von links nach rechts. Beispiel für "wahr": x10xxx11xx; 1xx2x3xxxx; 9x10x11x12. "Falsch" wäre:10x9x768x5: 123xx7x456. Kann jemand helfen?
Gruß Alifa

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeichenkette prüfen mit VBA
19.08.2017 07:57:45
Hajo_Zi

instr(Variable,"10x9x768x5")>0
Man muss keine Frage stellen, esc schauen wohl viele in Deinen Kopf und sehen die.

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
AW: Zeichenkette prüfen mit VBA
19.08.2017 08:27:40
Sepp
Hallo Alifa,
du solltest etwas konkretere Fragen stellen!
Meinst du so?
Function checkString(ByVal strCheck As String, ByVal Separator As String, ByVal maxNumber As Long) As Boolean
Dim varTemp As Variant, lngI As Long

If InStr(1, strCheck, "x") = 0 Then Exit Function

If Len(strCheck) <> 10 Then Exit Function

checkString = True

varTemp = Split(strCheck, Separator)

For lngI = 0 To UBound(varTemp)
  If IsNumeric(varTemp(lngI)) Then
    If Clng(varTemp(lngI)) > maxNumber Then
      checkString = False
      Exit Function
    End If
  End If
Next
End Function


Sub test()

Debug.Print checkString("x10xxx11xx", "x", 16)
Debug.Print checkString("9x10x11x12", "x", 16)
Debug.Print checkString("10x9x768x5", "x", 16)
Debug.Print checkString("123xx7x456", "x", 16)

End Sub

Gruß Sepp

Anzeige
@all ... mE war die Situation eindeutig ...
19.08.2017 08:38:47
Matthias
Hallo
Die Zahlen nach dem Trenner "x" sollten immer aufsteigend sein
Also:10,11 mit "x" dazwischen ist ok.
10,9,768 mit "x" dazwischen ist nicht ok, weil die 9 kleiner ist als die 10
Aber ich gebe zu es ist manchmal nicht einfach zu Verstehen was der Fragende will.
Gruß Matthias
Oder so
19.08.2017 09:01:21
Sepp
Hallo Alifa,
Function checkString(ByVal strCheck As String, ByVal Separator As String, ByVal maxNumber As Long) As Boolean
Dim varTemp As Variant, lngI As Long, lngTemp As Long

If InStr(1, strCheck, "x") = 0 Then Exit Function

If Len(strCheck) <> 10 Then Exit Function

varTemp = Split(strCheck, Separator)

For lngI = 0 To UBound(varTemp)
  If IsNumeric(varTemp(lngI)) Then
    If Clng(varTemp(lngI)) > maxNumber Then Exit Function
    If Clng(varTemp(lngI)) < lngTemp Then Exit Function
    lngTemp = Clng(varTemp(lngI))
  End If
Next

checkString = True
End Function


Sub test()

Debug.Print checkString("x10xxx11xx", "x", 16)
Debug.Print checkString("9x10x11x12", "x", 16)
Debug.Print checkString("9x13x11x12", "x", 16)
Debug.Print checkString("10x9x768x5", "x", 16)
Debug.Print checkString("123xx7x456", "x", 16)
End Sub

Gruß Sepp

Anzeige
AW: Oder so
19.08.2017 09:54:11
Alifa
Hallo Sepp,
diesmal war ich sehr sorgfältig in der Fragestellung. Deine Funktion ergibt "wahr" bei "11x11x11xx und bei anderen Strings, wo gleiche Zahlen vorkommen.
Gruß, Alifa
AW: Oder so
19.08.2017 10:01:48
Sepp
Hallo Alifa,
na ja, eigentlich hast du damit beschrieben, wie der String aussieht, aber nicht was konkret geprüft werden soll.
"die zehnstellige Zeichenkette beinhaltet die Zahlen 1 bis 16 und den Buchstaben x, der die Zahlen trennt. Die Größe der Zahlen steigt von links nach rechts"
Function checkString(ByVal strCheck As String, ByVal Separator As String, ByVal maxNumber As Long) As Boolean
Dim varTemp As Variant, lngI As Long, lngTemp As Long

If InStr(1, strCheck, "x") = 0 Then Exit Function

If Len(strCheck) <> 10 Then Exit Function

varTemp = Split(strCheck, Separator)

For lngI = 0 To UBound(varTemp)
  If IsNumeric(varTemp(lngI)) Then
    If Clng(varTemp(lngI)) > maxNumber Then Exit Function
    If Clng(varTemp(lngI)) <= lngTemp Then Exit Function
    lngTemp = Clng(varTemp(lngI))
  End If
Next

checkString = True
End Function

Gruß Sepp

Anzeige
AW: Oder so
19.08.2017 18:38:05
Alifa
Hallo Sepp,
danke für die perfekt funktionierende Funktion. Wenn Du noch so viel Geduld aufbringst, und wenn das möglich ist, ergänze die Funkt. damit die mumerischen Werte einen Unterschied von genau 1 haben, Ein Wahrer String: "9x10x11x12"
Gruß, Alifa
AW: Oder so
19.08.2017 19:37:45
Sepp
Hallo Alifa,
kein Problem.
Function checkString(ByVal strCheck As String, ByVal Separator As String, ByVal maxNumber As Long) As Boolean
Dim varTemp As Variant, lngI As Long, lngTemp As Long

If InStr(1, strCheck, "x") = 0 Then Exit Function

If Len(strCheck) <> 10 Then Exit Function

varTemp = Split(strCheck, Separator)

For lngI = 0 To UBound(varTemp)
  If IsNumeric(varTemp(lngI)) Then
    If Clng(varTemp(lngI)) > maxNumber Then Exit Function
    If Clng(varTemp(lngI)) <> lngTemp + 1 And lngTemp > 0 Then Exit Function
    lngTemp = Clng(varTemp(lngI))
  End If
Next

checkString = True
End Function

Gruß Sepp

Anzeige
Wieder mal ein typischer 'Alifa'! Ohne Worte!
19.08.2017 12:52:46
Luc:-?
:-?
mit einer Formel, nicht mit VBA
19.08.2017 13:38:19
lupo1
=SUMMENPRODUKT(--(
--TEIL(WECHSELN(GLÄTTEN(WECHSELN($A1&WECHSELN("x1x2x3x4";"x";"x9999999999");"x";" "));" ";WIEDERHOLEN(" ";99));{1.2.3.4}*99-98;99)<
--TEIL(WECHSELN(GLÄTTEN(WECHSELN($A1&WECHSELN("x2x3x4x5";"x";"x9999999999");"x";" "));" ";WIEDERHOLEN(" ";99));{2.3.4.5}*99-98;99)))>3
wo sich mit MMULT die beiden fast gleichen Terme bestimmt noch in einen verschmelzen lassen.
Mit
=SUMMENPRODUKT(--({-1;1}*TEIL(WECHSELN(GLÄTTEN(WECHSELN($A5&WECHSELN("x1x2x3x4";"x";"x9999999999"); "x";" "));" ";WIEDERHOLEN(" ";99));({0;1}+{1.2.3.4})*99-98;99)>0))> 3
ist mir eine solche Verkürzung nicht gelungen, aber so ähnlich dürfte es sein.
Anzeige
nicht eindeutig
19.08.2017 18:12:04
KlausF
Hallo Alifa,
und was ergibt 123xx4x567 ?
Wenn ich Eins Zwei Drei xx Vier x Fünf Sechs Sieben lese ist es Wahr
Bei z.B. Einhundertdreiundzwanzig xx usw. ist das Ergebnis Falsch
Wie werden überhaupt 3 oder mehr Zahlen in Folge behandelt?
Als grundsätzlich Falsch? Es sollen ja nur Zahlen von 1-16 berücksichtigt werden ...
Gruß
Klaus
AW: nicht eindeutig
19.08.2017 18:29:27
Alifa
Hallo Klaus,
bei mehr Ziffern als 2, gibt die Funktion von Sepp, wie erwartet, Falsch. Alle Zeichenketten mit mehr als 2-stelligen Zahlen(ZB 123) werden als Falsch festgestellt.
Gruß, Alifa

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige