AW: Serienmuster erkennen
02.01.2007 22:28:31
Erich
Hallo Marion,
Gegenfrage:
Was meinst du mit "funktioniert das auch, wenn ..."?
Wenn du damit meinst, dass die vorgestellte Formel bzw. das Makro auch dann einen Hinweis ausgeben,
kannst du das doch einfach ausprobieren.
Wenn du aber meinst, dass (mit anderer Formel/anderem Makro) auch bei anderen Konstellationen
Hinweise ausgeben werden sollen, müsstest du diese Konstellationen genau beschreiben.
Eine Möglichkeit der Beschreibung einiger Beispielmuster:
x ist eine Zelle = x
L ist eine leere Zelle
U ist eine Zelle<>x
(mx) steht für mindestens zwei aufeinanerfolgende x
(pL) steht für eine oder mehrere aufeinanderfolgende leere Zellen
-----------Muster---------- Hinweis
...UxLxLxLxL... 4 x L
...Ux(pL)x(pL)x(pL)xL... 4 x LL
...(mx)L(mx)L(mx)L... 3 xx L
...(mx)(pL)(mx)(pL)(mx)L... 3 xx LL
und die Umsetzung per Makro:
Option Explicit
Sub serien2()
Dim arr() As String, zz As Long, stat As Byte, ii As Long, strT As String
ReDim arr(1 To Cells(Rows.Count, 1).End(xlUp).Row + 1)
Columns(4).ClearContents
stat = 99
For zz = 1 To Cells(Rows.Count, 1).End(xlUp).Row + 1
Select Case LCase(Cells(zz, 1))
Case "x"
If stat = 1 Then
If arr(ii) = "x" Then arr(ii) = "xx"
Else
stat = 1: ii = ii + 1: arr(ii) = "x"
End If
Case ""
If stat = 0 Then
If arr(ii) = "L" Then arr(ii) = "LL"
Else
stat = 0: ii = ii + 1: arr(ii) = "L"
End If
Case Else
If stat <> 2 Then stat = 2: ii = ii + 1: arr(ii) = "a"
End Select
If ii > 5 Then
strT = arr(ii - 5) & arr(ii - 4) _
& arr(ii - 3) & arr(ii - 2) & arr(ii - 1) & arr(ii)
If strT = "xxLxxLxxL" Then
Cells(zz, 4) = "3 xx L"
ElseIf Replace(strT, "LL", "L") = "xxLxxLxxL" Then
Cells(zz, 4) = "3 xx LL"
End If
If ii > 7 Then
strT = arr(ii - 7) & arr(ii - 6) & strT
If strT = "xLxLxLxL" Then
Cells(zz, 4) = "4 x L"
ElseIf Replace(strT, "LL", "L") = "xLxLxLxL" Then
Cells(zz, 4) = "4 x LL"
End If
End If
End If
Next zz
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort