VBA: Datum aus Zelle lesen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Warum musst du das Datum auslesen? Kannst du nicht einfach den Inhalt von einer Zelle in die andere Übertragen, z.B. so?

Cells(1, 2).Value = Cells(1, 1).Value

oder

Range("B1").Value = Range("A1").Value

Von A1 in B1 schreiben. Beides macht das Gleiche, nur unterschiedliche schreibweisen

Herzbube27 
Fragesteller
 03.06.2016, 09:00

Nein leider soll ich nur das Datum herausfiltern. Es gibt quasi eine "Informationsspalte" wo eben Dinge wie "Neu ab...", "Geändert ab..." "Gelöscht ab..." steht. Dieses Datum soll genommen werden und dementsprechend die Spalten "Gültig von..." und "Gültig bis..." geändert werden.

0
azmd108  03.06.2016, 09:07
@Herzbube27

Dann z.B. so. So kannst du aus dem String "Neu ab Datum" alles herausfiltern, was hinter "Neu ab " steht und dazu das Leerzeichen entfernen. Somit hast du nur noch das Datum.

Range("B1").Value = Replace(Join(Split(Range("A1").Value, "Neu ab ")), " ", "")

oder noch einfacher, nur mit Replace (weil ausreichend)

Range("B1").Value = Replace(Range("A1").Value, "Neu ab ", "")
0

Wenn wirklich immer "Neu ab" vor dem Datum steht, fängt das Datum immer beim 8ten Zeichen der Zelle an. Du brauchst nichtmal VBA dafür. Einfach die Formel nehmen:

=DATWERT(TEIL(A1;8;8))

Statt A1 halt die Zelle, wo "Neu ab 07.05.16" drin steht. Und die Zelle, in die die Formel reinkommt, als Datum formatieren.

Oder falls anstatt "neu ab" auch andere Sachen drinstehen, wird das Datum wahrscheinlich immer aus den letzten acht Zeichen der Zelle bestehen. Dann wäre die passende Formel:

=DATWERT(RECHTS(A1;8))

Man kann das zwar auch als VBA-Funktion bauen, aber das wäre in dem Fall unsinnig.

Herzbube27 
Fragesteller
 03.06.2016, 09:15

weißt du wie das mit VBA läuft? Es handelt sich um ein ziemlich großes Pogramm, weshalb das ganze mit VBA laufen muss. Es sind hier mehrere Dateien. In der einen Datei steht die Spalte "Neu ab...". Ein Programm in einer weiteren Datei zieht sich Zeile für Zeile die Daten aus dieser ersten Datei und liest dann irgendwann in einer Zeile "Neu ab...". Jetzt soll in der neuen Datei, die sich mit Daten aus der Ursprungsdatei befüllt in der Spalte "Gültig_ab" das Datum entsprechend ändern. ich weiß nicht ob das jetzt verständlich beschrieben hab, jedoch ist es auf jeden Fall notwendig, dass ich das ganze mit VBA in mein Programm einbaue. 

0
daCypher  03.06.2016, 09:46
@Herzbube27

Ok. Den genauen Code kann ich dir nicht geben, weil dich dafür den bisherigen Code wissen müsste. Wahrscheinlich wird es in dem Programm schon eine "For Each" Schleife geben, die jede Zelle durchgeht. Da braucht man dann nur die entsprechende VBA-Funktion zu der oben genannten Excel-Funktion einfügen.

Ich hab dir mal was gebastelt, wo du dir abschauen kannst, wie es gehen könnte.

Public Sub DatCopy()
Dim rngAlleZellen As Range ' Alle Zellen, die ausgelesen werden sollen Dim rngAktuelleZelle As Range ' Zelle, die pro Schleifendurchlauf ausgelesen wird Dim datAktuellesDatum As Date ' Datum, was ausgelesen wurde
Set rngAlleZellen = Range("A1:A28") ' In meiner Test-Excel sind das die Zellen, wo "Neu ab " drinsteht
For Each rngAktuelleZelle In rngAlleZellen ' Hier beginnt die Schleife datAktuellesDatum = Right(rngAktuelleZelle, 8) ' Datum wird ausgelesen und in Variable gespeichert Range("C" & rngAktuelleZelle.Row).Value = datAktuellesDatum ' Datum wird in der gleichen Zeile, wie Herkunftszeile in Spalte C gespeichert Next rngAktuelleZelle ' Hier endet die Schleife End Sub
2
PWolff  03.06.2016, 11:20
@Herzbube27

Wenn man eine Excel-Formel in VBA verwenden will, braucht man zunächst einmal den englischen Namen der Funktion.

Den bekommt man, indem man eine Formel mit der betreffenden Funktion auf Deutsch in eine Zelle schreibt (bzw. eine Zelle auswählt, in der eine Formel mit der betreffenden Funktion steht) und in der Entwicklungsumgebung im Direktfenster sich ActiveCell.Formula ausgeben lässt:

?ActiveCell.Formula

Die Funktion kann man entweder direkt mit diesem Namen verwenden oder als Bestandteil von WorksheetFunction verwendet, z. B.:

aufgerundetAufHalbeEuro = WorksheetFunction.Ceiling(Betrag, 0.5)

-----

Man könnte auch in einer Schleife nachsehen lassen, wo das Datum anfängt:

    For datumStartPos = 1 To Len(zellinhalt)
If IsDate(Mid$(zellinhalt, datumStartPos)) Then Exit For 'datumStartPos
Next datumStartPos '= 1 To Len(zellinhalt)
If datumStartPos > Len(zellinhalt) Then 'kein gültiges Datum gefunden
aktuellesDatum = 0 'ungültiger Wert
Else
aktuellesDatum = CDate(Mid$(zellinhalt, datumStartPos))
End If
Einleitungstext = Left$(zellinhalt, datumStartPos - 1)
1

so gehts auch 

=RECHTS(A1;8)