![]() |
Betrifft: Makro, welches Daten umwandelt
von: Christian
Geschrieben am: 15.11.2014 08:22:07
Hallo an alle,
ich möchte euch bitten, mir zu helfen nachfolgendes Makro ein wenig abzuändern.
Es geht mir darum, ich benutze das Makro an 2 Stellen in meiner Tabelle. Einmal als Formel =fncDatumUmwandlung(C1) und einmal =fncDatumUmwandlung(G1). Beides in Tabelle2.
In dem Makro steht u.a. ein Mechanismus, der aus einer vierstelligen Zahl ein Datum macht, z.B, aus der Zahl 1963 den 31.12.1963.
Gibt es eine Möglichkeit, dass das Makro unterscheidet, dass wenn sich die Formel auf Spalte G bezieht, das Makro wie gehabt den 31.12. ausgibt, jedoch wenn sie sich auf Spalte C bezieht, den 01.01. ausgibt?
Wenn ja wäre ich euch für Eure Hilfe dankbar.
Gruß
Chris
Function fncDatumUmwandlung(rngDatum As Range) As Variant Dim iPos As Integer, arrEN, arrDE arrEN = Array("January", "February", "March", "April", "May", "June", "July", "August", " _ September", "October", "November", "December") arrDE = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", " _ September", "Oktober", "November", "Dezember") strText = Trim(rngDatum.Text) If Len(strText) = 4 And IsNumeric(strText) Then fncDatumUmwandlung = DateSerial(--strText, 12, 31) End If If fncDatumUmwandlung = "" Then If IsDate(strText) Then fncDatumUmwandlung = CDate(strText) End If End If If fncDatumUmwandlung = "" Then For iPos = 0 To 11 strText = Replace(strText, arrEN(iPos), arrDE(iPos)) Next If IsDate(strText) Then fncDatumUmwandlung = CDate(strText) End If End If If fncDatumUmwandlung = "" Then For iPos = 0 To 11 strText = Replace(strText, Left(arrEN(iPos), 3), arrDE(iPos)) Next If IsDate(strText) Then fncDatumUmwandlung = CDate(strText) End If End If Select Case strText Case Format(fncDatumUmwandlung, "MMM YY"), Format(fncDatumUmwandlung, "MMM YYYY"), _ Format(fncDatumUmwandlung, "MMMM YY"), Format(fncDatumUmwandlung, "MMMM YYYY") fncDatumUmwandlung = DateSerial(Year(fncDatumUmwandlung), Month(fncDatumUmwandlung) + 1, _ _ 0) End Select End Function
![]() ![]() |
Betrifft: AW: Makro, welches Daten umwandelt
von: Oberschlumpf
Geschrieben am: 15.11.2014 08:56:24
Hi Christian
Versuch mal Folgendes (ungetestet):
Änder diese Zeile
Function fncDatumUmwandlung(rngDatum As Range) As Variant
Function fncDatumUmwandlung(rngDatum As Range,spalte As String) As VariantAnder diesen Code
If Len(strText) = 4 And IsNumeric(strText) Then fncDatumUmwandlung = DateSerial(--strText, 12, 31) End If
If Len(strText) = 4 And IsNumeric(strText) Then If spalte = "g" Then fncDatumUmwandlung = DateSerial(--strText, 12, 31) Else fncDatumUmwandlung = DateSerial(--strText, 1, 1) End If End IfAls Formel trägst du dann in den Zellen das ein:
![]() ![]() |
Betrifft: AW: Makro, welches Daten umwandelt
von: Christian
Geschrieben am: 15.11.2014 09:14:34
Hallo Thorsten,
vielen Dank. Du warst schon sehr nah dran, den Rest habe ich dann auch so hinbekommen.
Mit anderen Worten, die Formeln müssen
=fncDatumUmwandlung(C1;"c")bzw.
heißen damit es funktioniert. Aber wie gesagt, so funktioniert es.
=fncDatumUmwandlung(G1;"g")
=WENN(C1="";"";fncDatumUmwandlung(C1;"c"))jedoch wenn ich dann nach der Spalte in der die Formel steht aufsteigend sortieren möchte, stehen zuerst die Zellen da, die die Formel leer lässt und dann erst aufsteigend die die ein Datum beinhalten. Hast du eine Idee, wie ich die Meldung #WERT! umgehen kann aber ich trotzdem so sortieren kann, dass die Zellen die leer sind am Ende stehen?
![]() ![]() |
Betrifft: AW: Makro, welches Daten umwandelt
von: Oberschlumpf
Geschrieben am: 15.11.2014 09:47:21
Hi Cristian
Da müsstest du ein Makro haben, das erst mal alle Zeilen ohne Datum von den anderen Zeilen trennt...sie müssten also erst mal entfernt werden.
Denn ne Sortierung beinhaltet jede Zeile im ausgewählten Bereich.
Und später müssen die "Leerzeilen" ja wieder an den richtigen Stellen eingefügt werden.
Weiss nich, ob das so einfach is.
Was hältst du von der Idee, per Makro zuerst...
...alle Zeilen ohne Datum auszublenden
...die übrigen Zeilen sortieren
Und wenn keine Sortierung mehr erwünscht, die Zeilen wieder einblenden?
Ich hab jetzt keine Zeit, Makros zu erstellen.
Aber in n paar Std wieder.
Ciao
Thorsten
![]() ![]() |
Betrifft: AW: Makro, welches Daten umwandelt
von: Christian
Geschrieben am: 15.11.2014 09:52:55
Hallo Thorsten,
bevor du dir all die Mühe machst, gibts da nicht einfach eine Lösung über eine Hilfsspalte?
Oder von mir aus auch statt die Zelle leer zu lassen, irgend ein Zeichen, dass in der Sortierreihenfolge die gewünschte Position hat.
Aber danke schonmal
Christian
![]() ![]() |
Betrifft: AW: Makro, welches Daten umwandelt
von: Christian
Geschrieben am: 15.11.2014 09:57:36
Hallo Thorsten,
habe das Problem gelöst. die Funktion steht in D1
Hilfsspalte =HEUTE()-D1 und nach der Spalte absteigend sortiert. Da ich diese Spalte sowieso aussblende ist es mir auch gleich ob die Formel dann in jeder Zeile einen Wert ausgeben kann oder nicht.
Gruß
Christian
![]() ![]() |
Betrifft: AW: Makro, welches Daten umwandelt
von: Christian
Geschrieben am: 15.11.2014 09:59:27
Hallo Thorsten,
habe das Problem gelöst. die Funktion steht in D1
Hilfsspalte =HEUTE()-D1 und nach der Spalte absteigend sortiert. Da ich diese Spalte sowieso aussblende ist es mir auch gleich ob die Formel dann in jeder Zeile einen Wert ausgeben kann oder nicht.
und da ja auch =WENN(C1="";"";HEUTE()-D1) funktioniert, ist das Problem erst recht gelöst.
Gruß
Christian
![]() |