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 hajo_zi Experte (9.1k Punkte)
Hallo Andreas,

suche mit instr() den Monat, trenne mit Mid() alles nach dem Monat ab und dann val.

Gruß Hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Hajo,

du setzt ja bei mir einiges voraus und ich weiß noch nicht ob ich dem gerecht werden kann...??? Wenn nicht, melde ich mich noch einmal.
Danke.
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Hajo,

Habe mich ausführlich mit den Funktionen beschäftigt..Problem ist der
Umstand, dass einige Monate mehrfach vorkommen und die instr() nur
das erste Auftreten anzeigt ich aber u.U. Das letzte Auftreten suche
weil dort die größte Zahl steht..
A.
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
InStrRev()

Gruß Hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
...ich probier's .
Gruß
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^

du bekomst eine erste Position mit instr

len gibt dir die länge des string zurück
val erzeugt eine eindeutige zahl
instr sucht einen string und gibt dessen Position zurück
mid zerlegt den string nach belieben

1) len()
2)mid() z.b. instr(mid(string,posVonInstr,Len(string)-wortlaenge))
3)instr()
5)Val()

das ist wie legobausteine :-)

und recht amüsant

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

manchmal fallen die Steine um und es gibt ein Durcheinander - dann ist es nicht mehr amüsant... :-)
Gruß A.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^

erste versuch :-)

gruss nighty

Sub stringz()
Dim DString As String
Dim HMonat As String
Dim SMonate As Variant
Dim Suche As Long, Zeichen As Long, DIndex As Long, Start As Long
DString = "Mrz1 Mrz2 Apr1 Apr2 Mai1 Mai2 Jun1 Jun2 Jul 3 Jul1 Jul4"
SMonate = Array("Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez")
HMonat = Month(Date) - 1
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 nighty Experte (6.6k Punkte)
hi Ahorn ^^

Array index ist 0 bis 11
vom aktuellen Monat ausgehend,einen Monat zurueck. per index
von diesem wird die groesste zahl ermittelt

die ermittelte zahl ist noch 2 stellig,bei bedarf differenzierter

gruss nighty

p..s.
noch nicht optimiert.erstmal nur eine spontane idee
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^^

waere eine schöne Schulaufgabe *g*

die zahl differenzierter abzutasten

suche ab der Position des vorigen fundes ein Leerzeichen

nun hast du die tatsaechliche variable laenge der zahl,
mit dem ersten und zweiten fund eindeutig abgerenzt

gruss nighty

p.s.
das mit dem umfallen der legosteine ist nur kurzfristig,bis die sucht einsetzt *g*
...