Microsoft Excel

Herbers Excel/VBA-Archiv

Makro, welches Daten umwandelt

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

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


  

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.

=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


  

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