4k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)
Hallo,

ich suche einen Code mit dem ich einen String duchsuchen kann:
z.B.
Mrz1 Mrz2 Apr1 Apr2 Mai1 Mai2 Jun1 Jun2

Die Länge des String ist variabel, er besteht ausschließlich aus Monatsbezeichnungen "MMM" Jan-Dez gefolgt von einer Zahl und Leerstelle. Ich möchte die höchste Zahl hinter dem aktuellen Monat -1, also aktueller Monat = Juli, Vormonat = Juni und hier die höchste Zahl - also "2". Die Reihenfolge ist dabei nicht unbedingt nach aufsteigenden Monaten sortiert.
Hat jemand einen Tipp?
Danke und Gruß
Andreas

15 Antworten

0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo nighty,

danke für en kniffligen Code und die Erläuterungen!!!!
Ich kriege nur bei ...
DIndex = SMonate(HMonat - 1)

einen Laufzeitfehler wegen Typenunverträglichkeit. Woran kann das denn liegen?
Gruß
Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^

jo,zuwenig getestet :-)

gruss nighty

korrigiert

Sub stringz()
Dim DString As String, Dindex As String
Dim HMonat As Integer
Dim SMonate As Variant
Dim Suche As Long, Zeichen As Long
Dim Start As Long, Nummer As Long
Dim Ziel As Long
DString = "Mrz1 Mrz2 Apr1 Apr2 Mai1 Mai2 Jun5 Jun2 Jul 3 Jul1 Jul4"
SMonate = Array("Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez")
HMonat = Month(Date) - 2
If HMonat < 1 Then HMonat = 12
Dindex = SMonate(HMonat - 1)
Start = 1
For Zeichen = 1 To Len(DString)
Suche = InStr(Start, DString, SMonate(HMonat))
If Suche > 0 Then
Nummer = Val(Mid(DString, Suche + 3, 2))
Start = Zeichen + 5
Zeichen = Zeichen + 5
If Ziel < Nummer Then Ziel = Nummer
End If
Next Zeichen
Cells(1, 1) = Ziel
End Sub
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo nighty,

jetzt läufts und bringt auch das richtige Ergebnis - super!! Die Monate müssen ja nicht mal in der richtigen Reihenfolge stehen.....
Prima Lösung!! Vielen Dank!!
Gruß
Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

korrigiert wurde

flexible Erfassung der zahl
sprung vom jan zum dez

gruss nighty

Sub stringz()
Dim DString As String
Dim HMonat As Integer
Dim SMonate As Variant
Dim Suche As Long, Zeichen As Long, Start As Long
Dim Nummer As Long, Ziel As Long
DString = "Jan5 Dez7 Mrz1 Mrz2 Apr1 Apr2 Mai1 Mai2 Jun45 Jun2 Jul 3 Jul1 Jul4 Feb3"
SMonate = Array("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez")
HMonat = Month(Date)
If HMonat = 1 Then HMonat = 13
HMonat = HMonat - 2
Start = 1
For Zeichen = 1 To Len(DString)
Suche = InStr(Start, DString, SMonate(HMonat))
If Suche > 0 Then
Nummer = Val(Mid(DString, Suche + 3, InStr(Suche, DString, " ") - Suche - 3))
Start = Zeichen + 3
Zeichen = Zeichen + 3
If Ziel < Nummer Then Ziel = Nummer
End If
Next Zeichen
Cells(1, 1) = Ziel
End Sub
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo nighty,
die erste Version war schon Klasse, jetzt noch besser!!!! Prima finde ich auch, dass der Code auf verschiedene Varianten der Schreibweise Mrz2 oder Mrz 2 usw reagiert, das reduziert die Fehlerquote deutlich.
Einfach super. Danke!!!!
Viele Grüße
Andreas
...