Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1392to1396
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro, welches Daten umwandelt

Makro, welches Daten umwandelt
15.11.2014 08:22:07
Christian
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

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro, welches Daten umwandelt
15.11.2014 08:56:24
Oberschlumpf
Hi Christian
Versuch mal Folgendes (ungetestet):
Änder diese Zeile
Function fncDatumUmwandlung(rngDatum As Range) As Variant

um in
Function fncDatumUmwandlung(rngDatum As Range,spalte As String) As Variant
Ander diesen Code

If Len(strText) = 4 And IsNumeric(strText) Then
fncDatumUmwandlung = DateSerial(--strText, 12, 31)
End If

um in

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 If
Als Formel trägst du dann in den Zellen das ein:
=fncDatumUmwandlung(C1,"g")
oder das
=fncDatumUmwandlung(C1,"c")
Meine Codeänderungen bewirken nur, dass deine Funktion nicht mehr einen sondern zwei Parameter "erwartet".
Und der zweite Parameter - spalte - hilft dann im Code zu unterscheiden, ob du als Ergebnis den ersten oder letzten Tag eines Jahres erhalten möchtest.
Hilfts?
Wenn nicht, zeig uns bitte per Upload eine Excel-Bsp-Datei, die deinen Code und einige Testdaten in der Datei enthält.
Ciao
Thorsten

Anzeige
AW: Makro, welches Daten umwandelt
15.11.2014 09:14:34
Christian
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.

=fncDatumUmwandlung(G1;"g")
heißen damit es funktioniert. Aber wie gesagt, so funktioniert es.
Jedoch darf ich dich noch um etwas anderes bitten, sorry ist mir erst aufgefallen, als ich während ich auf eine Antwort gewartet habe, schonmal angefangen habe die Tabelle zu füllen.
In manchen Zeilen ist in Spalte C kein Datum bekannt, die Funktion gibt also #WERT! aus. Habe _ mir erst versucht damit zu helfen

=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?
Gruß
Chris

Anzeige
AW: Makro, welches Daten umwandelt
15.11.2014 09:47:21
Oberschlumpf
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

Anzeige
AW: Makro, welches Daten umwandelt
15.11.2014 09:52:55
Christian
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

AW: Makro, welches Daten umwandelt
15.11.2014 09:57:36
Christian
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

Anzeige
AW: Makro, welches Daten umwandelt
15.11.2014 09:59:27
Christian
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige