online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Jungdra vom 31.05.2019, 10:48 Options

Datum in einem Makro umwandeln

Hallo Zusammen,
ich versuche mich gerade erstmalig an einem Makro in Excel und habe 100erte von Fragen. Keine Angst, ich fange erstmal harmlos an...;-)
Ich möchte gerne in dem Makro aus dem aktuellen Datum die Zeichenfolge JJJJMM extrahieren, also z.B. heute ist der 31.05.2007 heißt für das Makro, daß es daraus den Text "200705" kreeieren soll. Innerhalb von Excel habe ich das geschafft (vermutlich auch eher von hinten durchs Knie geschossen mit = TEXT(HEUTE(); "JJJJ") & TEXT(HEUTE(); "MM")), aber ich bekomme das einfach nicht ins Makro "übersetzt".
Falls ihr wissen möchtet, wofür ich das brauche: Am Ende des Makros soll die Datei unter einem Namen (der sich aus einer zu füllenden Variablen ergibt) plus dieser Datumsangabe abgespeichert werden. Momentan schaffe ich dies nur durch Verweis auf eine Zelle im Excelsheet, in die ich meine o.a. Formel geschrieben habe, aber das geht doch bestimmt auch irgendwie ohne das Sheet, nur im Makro, oder?
Vielen Dank und viele Grüße,
Jungdra (absolute Beginner)


Antwort schreiben

Antwort 1 von Proggi vom 31.05.2019, 11:34 Options

Datumsangaben werden in Excel als Zahl gerechnet.
Now() gibt das aktuelle Datum und Uhrzeit aus. Vergleiche
msgbox now()
msgbox now()*1


Der Wert ist das aktuelle Datum in Form von Tagen seit 1900, vor dem Komma sind Tage und nach dem Komma die Uhrzeit wobei
,00 = 0Uhr
,25 = 6 Uhr
,50 = 12 Uhr
,75 = 18 Uhr und alles dazwischen entsprechend.

---

mit Day(Zahl) Month(Zahl und Year(Zahl) bekommst du den jeweiligen Wert Tag des Monats, Monat und Jahr als Zahl aus dem oben genannten wert. z.B.
msgbox Month(Now())


---

mit Format("1", "00") kannst du aus einer einziffer Zahl eine Zahl mit führender 0 machen.

Format(Month(Now() ), "00")


MDatum = now() 'oder ein Zellenwert...
msgbox Year(MDatum ) & Format(Month(MDatum ), "00")

Antwort 2 von Flupo vom 31.05.2019, 11:59 Options

Die gewünschte Zeichenfolge "200705" kannst du durch folgende Zeilen erzeugen:

Jahr = Right(Str(Year(Date)), 4)
Monat = Str(Month(Date))
If Len(Monat) = 2 Then
Monat = "0" + Right(Monat, 1)
Else
Monat = Right(Monat, 2)
End If
datum = Jahr + Monat



Die kleinen "Verrenkungen" mit der Right()-Funktion sind notwendig weil str(Zahl) immer noch ein Leerzeichen vor den Zahlenwert baut (als Reservestelle für Minuswerte).

Gruß Flupo

Antwort 3 von Proggi vom 31.05.2019, 12:09 Options

nochmal zur wiederholung - man macht das mit dem format befehl nicht mit if len(Monat...

msgbox Year(MDatum ) & Format(Month(MDatum ), "00")

das andere geht auch aber ist unübersichtlicher und wenn man es in schleifen eventuell mal sehr oft hintereinander ausführ extrem langsam.

Antwort 4 von Flupo vom 31.05.2019, 12:21 Options

Zitat:
nochmal zur wiederholung - man macht das mit dem format befehl nicht mit if len(Monat...

msgbox Year(MDatum ) & Format(Month(MDatum ), "00")

das andere geht auch aber ist unübersichtlicher und wenn man es in schleifen eventuell mal sehr oft hintereinander ausführ extrem langsam.


Ich hatte mir eigentlich verkniffen, deinen Lösungsvorschlag zu kommentieren, tu es nun aber doch.
Was soll denn der Blödsinn mit der Messagebox? Es geht bei der Fragestellung darum, eine Zeichenfolge zu erzeugen, die dann als Dateiname verwendet werden kann. Wozu muss da ein Fenster aufpoppen?
Die Formatierung per "Format(Month(datum),"00")" erzeugt immernoch eine Zahl, die vor der Verwendung als Dateiname in eine Zeichenfolge umgewandelt werden muss. Dein Lösungsvorschlag ist also maximal eine Teillösung.
Auch meine Schleife wird genau einmal durchlaufen. Was soll daran langsam sein? Genau genommen ist es gar keine Schleife sondern eine Verzweigung.

Also halt mal bitte den Ball flach. ;-)

Gruß Flupo

Antwort 5 von Flupo vom 31.05.2019, 12:34 Options

Ich habe Proggis Vorschlag der Formatierung mit Format(zahl, "00") mal ausprobiert.
Die Zahl wird dann immer zweistellig erzeugt. Die führende Null geht aber bei der Umwandlung in eine Zeichenkette wieder verloren. Man kommt also um die Prüfung der Länge mit len() und (bei Bedarf) Ergänzung der führenden Null nicht herum.
Die Umwandlung in eine Zeichenkette ist zwingend erforderlich, weil numerische Variablen nicht als Dateinamen akzeptiert werden.

Gruß Flupo

Antwort 6 von Jungdra vom 31.05.2019, 13:16 Options

Hallo Ihr Beiden,
vielen Dank für die prompte Hilfe an BEIDE! Wenn ich noch die Auswahl aus verschiedenen Lösungen habe, umso besser. Ich persönlich bevorzuge theoretisch Lupos, da sie mir für mein simpel gestricktes Gehirn die verständlichere ist. Bei ",25=6 Uhr" steige ich geistig schon aus. Nichtsdestotrotz kann ich den Formatierungsbefehl mit der führenden Null auch gut gebrauchen. Den hatte ich nämlich auch schon gesucht. Und ich werde auf jeden Fall mal beide Tips probieren. Eigentlich müßte ich ja auch statt MsgBox einfach meinen Variablennamen nehmen können, oder?
Jedenfalls vielen Dank für die schnelle Hilfe. Ich bin beeindruckt und stelle gleich die nächste Frage (neues Thema). Ja, ja, so ist das mit dem kleinen Finger und der ganzen Hand...:-)
Viele Grüße,
Jungdra

Antwort 7 von Jungdra vom 31.05.2019, 13:18 Options

Sorry...wie editiert man denn hier? Ich wollte nicht aus Flupo einen Lupo machen: "F" nachreich....

Peinlich berührte Grüße,
Jungdra

Antwort 8 von Proggi vom 31.05.2019, 13:45 Options

Zitat:
Was soll denn der Blödsinn mit der Messagebox?

Die Messagebox dient zur kontrolle - natürlich kannst du die information auch in eine Variable übergeben und halt selber den Ball flach.

Zitat:
Die Zahl wird dann immer zweistellig erzeugt. Die führende Null geht aber bei der Umwandlung in eine Zeichenkette wieder verloren
- Wenn du was dran geändert hast vielleicht...

Zitat:
Die Formatierung per "Format(Month(datum),"00")" erzeugt immernoch eine Zahl, die vor der Verwendung als Dateiname in eine Zeichenfolge umgewandelt werden muss.

Wenn die Formatierung eine Zahl erzeugen würde, könnte es KEINE führende null haben...

@Flup - RTFM Ließ die Beschreibung vom Formatbefehl mal durch oder lern programmieren.


@Jungra

Speichere in MDatum ein datum oder ersetze MDatum durch now(), füge an die Stelle wo du Jahr und Monat stehen hast einfach

Year(MDatum) & Format(Month(MDatum), "00")



z.B.

Dateiname = Year(MDatum) & Format(Month(MDatum), "00") & " Meine Datei.txt"

Antwort 9 von nighty vom 31.05.2019, 13:50 Options

hi hr beiden :-)

beide haben sich muehe gegeben und das ist wertvoll :-)

eine msgbox dient oftmals nur zur verdeutlichung des ergebnisses

eine schleife ist uebrigens nicht immer langsam,je nach wissensstand,wie z.b. die findmethode langsamer ist als eine schleife die ein array durchlaeuft

gruss nighty

Antwort 10 von Jungdra vom 31.05.2019, 13:54 Options

Ich bin's nochmal! Habe Eure Antworten jetzt auf diese eine Zeile reduziert:
Datumsanhang = Year(Now()) & Format(Month(Now()), "00")..und genau das erreicht, was ich wollte.
SUUUPer! Vielen Dank!
Jungdra

Antwort 11 von Jungdra vom 31.05.2019, 13:57 Options

@Proggi: Ja, hatte ich auch schon gemerkt, vielen Dank! Aber Dein Kommentar war gerade noch nicht da, als ich meinen schrieb. Ich sehe jetzt ein bißchen blöder aus, als ich eh schon bin, aber egal...:-))

Ähnliche Themen

Datum aus einer .txt im Serienbrief umwandeln
DokDoc  21.02.2007 - 81 Hits -

Datum umwandeln
morpheus__85  12.11.2007 - 124 Hits - 2 Antworten

PC Datum per VBA Makro verändern
mfpanter  28.11.2007 - 102 Hits -

Datum vervollständigen für ganze Arbeitsmappe
Chrissie07  04.12.2007 - 78 Hits - 2 Antworten

Datum im Textformat umwandeln
wolpi27  06.06.2008 - 152 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Sun Jan 25 18:15:21 2026