Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1292to1296
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

String mit Sequenzen

String mit Sequenzen
12.01.2013 09:18:31
Alifa
Hallo,
ich versuche eine Funktion für ein Makro zu erstellen, die folgendes prüft:
Die Strings sind 6 bis 8-stellig und beinhalten ausschließlich die Ziffern 1 und 2. Jeder String soll genau 2 Sequenzen von 1-sen beinhalten. Die Differenz(d) zwischen der Anzahl der 1-sen in den beiden Sequenzen ist vorgegeben. Die Beispiele beziehen sich auf 6-stellige Strings. Wenn d=1 dann sind 122211,111211,112221,112111,211221,221121....WAHR. Beispiele mit d=3: 111121,121111. In diesem Falle sind nur die beiden Strings WAHR. Kann mir jemand helfen? Es dankt im Voraus
Alifa

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String mit Sequenzen
12.01.2013 09:57:42
Hajo_Zi
welche beiden Sequenzen bei 122211

AW: String mit Sequenzen
12.01.2013 11:16:32
Alifa
Die 1 gilt allein auch als Sequenz(Aufeinanderfolge),also sind es hier 1 und 11
Gruß, Alifa

AW: String mit Sequenzen
12.01.2013 11:20:28
Hajo_Zi
Gut ich bin raus, Du willst es nicht erklären wie Du auf die Zahlen kommst und was Sequenzen sind.
Gruß Hajo

AW: String mit Sequenzen
12.01.2013 12:16:06
CitizenX
Hi,teste mal:

Option Explicit
Sub test()
Dim Regex As Object: Set Regex = CreateObject("vbscript.regexp")
Dim strTest$, d
d = 3
strTest = "111121"
With Regex
.Global = True
.Pattern = "1{" & d + 1 & "}|2"
MsgBox "Die Abfrage ist " & CBool(Len(.Replace(strTest, "")) = 1)
End With
End Sub
Grüße

Anzeige
AW: String mit Sequenzen
12.01.2013 13:20:37
Alifa
Hallo CitizenX,
mit d=0 ist die sechsstellige Zahl(String)112112 WAHR. Denn die beiden Sequenzen 11 und 11 haben jeweils 2 Mal die 1 und d=2-2=0. Jedoch erkennt deine Funktion FALSCH. Leider verstehe ich die Funktion kaum, so muss ich fragen: Funktioniert die auch mit 7 und mit 8-stelliger Zahl(String)?
Grüße, Alifa

AW: String mit Sequenzen
12.01.2013 14:16:35
Erich
Hi Erhard,
ich hoffe dich richtig verstanden zu haben. Test bitte mal

Function AlifaTest2(sText As String, lDiff As Long) As Boolean
Dim pp As Long, p1 As Long, a1 As Long, p2 As Long, a2 As Long
p1 = InStr(sText, "1")
If p1 = 0 Or p1 > Len(sText) - 2 Then Exit Function
pp = InStr(p1 + 1, sText, "2")
If pp  0 Then Exit Function
End If
End If
If Abs(a1 - a2)  lDiff Then Exit Function
AlifaTest2 = True
End Function
Rückmeldung ist bei dir eh selbstverständlich - Grüße aus Kamp-Lintfort von Erich und: Schönes Wochenende allerseits!

Anzeige
AW: String mit Sequenzen
12.01.2013 16:39:16
Alifa
Hallo Erich,
Vielen Dank! Soll ich noch schreiben, dass die Funktion genau passt?! Jetzt habe ich Zahlen, wo die Differenz d nicht angegeben ist. Da gilt "nur" die Bedingung es sollen genau 2 Folgen von 1-sen sein.
Dann sind solche Zahlen WAHR:222121,211212,212112,122112,112112...11112111,21112112...
Grüße, Erhard

AW: String mit Sequenzen
12.01.2013 18:38:43
Erich
Hi Erhard,
prima, dass es geht!
Der Fall "fehlendes d" ließ sich leicht einbauen. Dabei habe ich gleich noch etwas verkürzt, einige Bezeichnungen
geändert und kleine Kommentare eingebaut:

Function AlifaTest3(sText As String, Optional lDiff As Long = -1) As Boolean
Dim p2 As Long, p1a As Long, a1 As Long, p1b As Long, a2 As Long
p1a = InStr(sText, "1")
If p1a = 0 Or p1a > Len(sText) - 2 Then Exit Function
p2 = InStr(p1a + 1, sText, "2")        ' 1. Sequenz-Pos.
If p2  0 Then Exit Function      ' 3. Sequenz ?
End If
If lDiff >= 0 And Abs(a1 - a2)  lDiff Then Exit Function  ' Längen-Diff.
AlifaTest3 = True
AlifaTest3 = True
End Function
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
1*"AlifaTest3 = True" = Kopierteufel :-) owT
12.01.2013 18:41:39
Erich

AW: String mit Sequenzen
12.01.2013 20:14:55
Alifa
Hallo Erich,
das passt, noch mal vielen Dank! Ein schönes Wochenende wünsche ich Dir und allen anderen auch,
Erhard

ein wenig geschönt
12.01.2013 21:08:19
Erich
Hi Erhard,
danke für die Rückmeldung und die Wünsche (erwidere!).
Hier noch mal mit sinnvoller verteilten Kommentaren:

Function AlifaTest3(sText As String, Optional lDiff As Long = -1) As Boolean
Dim p2 As Long, p1a As Long, a1 As Long, p1b As Long, a2 As Long
p1a = InStr(sText, "1")                ' 1. Sequenz-Pos.
If p1a = 0 Or p1a > Len(sText) - 2 Then Exit Function
p2 = InStr(p1a + 1, sText, "2")        ' 1. Sequenz-Ende
If p2  0 Then Exit Function      ' 3. Sequenz ?
End If
If lDiff >= 0 And Abs(a1 - a2)  lDiff Then Exit Function  ' Längen-Diff.
AlifaTest3 = True
End Function
Nochmal Grüße aus Kamp-Lintfort von Erich
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige