Frage von Herzbube27, 60

VBA: Zelle von hinten lesen, bis zur ersten Leerstelle?

Hallo, ich habe eine Tabelle mit einer Spalte, wo immer ein Datum am ende steht, welches ich herauszufiltern versuche. Es steh also immer z.B.: "blablabla 31.12.2016". hier möchte ich also das Datum herausfiltern und es anschließend in eine weitere Zelle in folgender Form schreiben: YYYYMMDD. Könnt ihr mir weiterhelfen?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von daCypher, 42
DatumVariable = Mid(aktuelleZelle, InstrRev(aktuelleZelle, " ") + 1)
ZielZelle = Format(DatumVariable, "YYYYMMDD")

Statt DatumVariable, aktuelleZelle und ZielZelle musst du halt die echten Variablennamen aus deinem Programm eintragen.

Falls das Datum in der Zielzelle als Datumswert gespeichert werden soll, kannst du in der zweiten Zeile auch 'Zielzelle = DatumVariable' schreiben. Dann halt in den Zielzellen die Formatierung auf Benutzerdefiniert stellen und dort das Format YYYYMMDD hinterlegen.

Kommentar von Herzbube27 ,

Danke tut! Noch eine Frage, dasselbe erneut, nur steht nun in den Zellen das Datum OHNE Jahr, also nur "07.01.". Wie mach ich es hier, dass das Datum wieder "MMDD" in eine andere Zelle geschrieben wird? geht das überhaupt ohne Jahr?

Kommentar von daCypher ,

Dann müsstest du noch eine Prüfung dazwischenbauen.

Dim DatumText as String
DatumText = Mid(aktuelleZelle, InstrRev(aktuelleZelle, " ") + 1)
If len(Datumtext < 8) Then
    DatumVariable = DatumText & Year(Date) ' Also wenn das Datum aus weniger als 8 Zeichen besteht, fehlt das Jahr, dann soll das aktuelle Jahr rangehängt werden. Alternativ anstatt year(date) halt die gewünschte Jahreszahl einfügen.
Else
    DatumVariable = DatumText
EndIf
ZielZelle = Format(DatumVariable, "YYYYMMDD")
Kommentar von Herzbube27 ,

Perfekt, danke! war nur noch ein kleiner Fehler drin: Es muss wohl "len(Datumtext) < 8" heißen ;)

Kommentar von daCypher ,

Oh, stimmt. Tut mir Leid. Hab den Code nicht getestet ^^

Antwort
von dkilli, 28

Da brauchst du kein VBA!

In A1 steht zum Beispiel: Bla Blabla xyz 3.6.2016

In B1 schreibst  du 

=GLÄTTEN(WECHSELN(A1;LINKS(A1;FINDEN("#";WECHSELN(A1;" ";"#";LÄNGE(A1)-LÄNGE(WECHSELN(A1;" ";""))))-1);))

Klicke in den Spaltenkopf B mit der rechten Maustaste. Wähle Zellen formatieren aus.

Im öffneten Dialogfeld Zahlen-> Benutzerdefiniert-> Typ Statt Standard gib

JJJJMMTT ein. 

Damit kannst du ganz normal weiter rechnen, da im Hintergrund immer noch die vergangene Tage seit dem 1.1.1900 steht. Also für den 3.6.2016 42524

Kommentar von Iamiam ,

Ganz genau, hatte grade eine ganz ähnliche Lösung "konstruiert" (für Beliebiges nach dem letzten Leerzeichen):

=TEIL(A1;FINDEN("|";WECHSELN(A1;" ";"|";LÄNGE(A1)-LÄNGE(WECHSELN(A1;" ";""))))+1;9999)

Für Ergebnis als Zahl *1 oder +0, ggf Datumsformat einstellen

Antwort
von dkilli, 20

Wenn innerhalb des Textes keine Ziffern vorkommen, so kannst du folgende Formel verwenden


=TEIL(A1;VERGLEICH(WAHR;ISTZAHL(TEIL(A1;SPALTE(1:1);1)*1);0);LÄNGE(A1))*1

Diese Formel musst du mit Strg + Shift + Enter abschließen! Sie ist eine Array-Formel

Das Ergebnis musst du nach deinen Wünschen formatieren.

Keine passende Antwort gefunden?

Fragen Sie die Community