Microsoft Excel

Herbers Excel/VBA-Archiv

Kalenderdaten umwandeln

Betrifft: Kalenderdaten umwandeln von: Christian
Geschrieben am: 01.09.2014 13:19:36

Hallo an alle,

weiß einer eine Formel, die alles abdeckt?
Einzelheiten in meiner Mappe.

Gruß und Danke
Christian

PS: Würde auch eine Makrolösung nehmen, wenn das einfacher sein sollte als mit einer Formel.

https://www.herber.de/bbs/user/92422.xlsx

  

Betrifft: AW: Kalenderdaten umwandeln von: ransi
Geschrieben am: 01.09.2014 16:24:24

Hallo

Sind das alle VArianten oder kommt da noch mehr ?

ransi


  

Betrifft: AW: Kalenderdaten umwandeln von: czender
Geschrieben am: 01.09.2014 16:28:56

Hallo Ransi,

nein, das sind alle.

Gruß
Christian


  

Betrifft: AW: Kalenderdaten umwandeln von: fcs
Geschrieben am: 01.09.2014 17:53:52

Hallo Christian,

ich hatte erst versucht per Formel dass Ganze aufzulösen, aber um es einigermaßen übersichtlich zu halten braucht es wohl 2 bis 3 Hilfsspalten. Insbesondere der Fall in Zelle A5 (in der Zelle steht eine echtes Datum, das als MMM JJ formatiert ist) bereitet Probleme.

Ich bin dann zu einer VBA-Funktion übergegangen.
Die ist zwar auch nicht einfacher, aber man kann die Sonderfälle "einfacher" abarbeiten"

Gruß
Franz

Function fncDatumUmwandlung(rngDatum As Range) As Variant
  Dim intJahr As Integer, intMonat As Integer, intTag As Integer
  Dim strTag As String, strMonat As String, strJahr As String, strText As String
  Dim iPos As Integer
  strText = Trim(rngDatum.Text)
  fncDatumUmwandlung = "#Datumsfehler!"
  Select Case strText
    Case "????", ""
      'Texte die nicht konvertiert werden sollen
      fncDatumUmwandlung = ""
    Case Else
      If Len(strText) = 4 And IsNumeric(strText) Then
        'nur Jahreszahl steht in Zelle
        intJahr = Val(strText)
        intMonat = 12
        intTag = 31
        fncDatumUmwandlung = DateSerial(intJahr, intMonat, intTag)
      Else
        'Prüfen, ob ein Datum mit nummerischen Angaben in der Zelle steht/angezeigt wird
        If strText Like "#.#.##" Or strText Like "##.#.##" Or _
          strText Like "#.##.##" Or strText Like "##.##.##" Or _
          strText Like "#.#.####" Or strText Like "##.#.####" Or _
          strText Like "#.##.####" Or strText Like "##.##.####" Then
          If IsDate(strText) Then
            fncDatumUmwandlung = CDate(strText)
          End If
        Else
          'Datumstext Zeichenweise verarbeiten
          'Nummerische Zeichen am Anfang als Tag interpretieren
          For iPos = 1 To Len(strText)
            Select Case Asc(Mid(strText, iPos, 1))
              Case Asc(0) To Asc(9)
                strTag = strTag & Mid(strText, iPos, 1)
              Case Else
                If strTag = "" Then strTag = "31"
                Exit For
            End Select
          Next
          intTag = Val(strTag)
          'nach Tag folgenden Text als Monat, Ziffern als Jahr interpretieren
          For iPos = iPos To Len(strText)
            Select Case Asc(Mid(strText, iPos, 1))
              Case Asc(" "), Asc(".") 'Trennzeichen im Datumstext
              Case Asc(0) To Asc(9)
                strJahr = strJahr & Mid(strText, iPos, 1)
              Case Else
                strMonat = strMonat & Mid(strText, iPos, 1)
            End Select
          Next
          
          If Len(strJahr) = 2 Then
            strJahr = "20" & strJahr
          End If
          intJahr = Val(strJahr)
          
          Select Case strMonat
            Case "Jan", "Januar", "January", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 1
            Case "Feb", "Februarar", "February", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 2
            Case "Mrz", "März", "Mar", "March", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 3
            Case "Apr", "April", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 4
            Case "Mai", "May", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 5
            Case "Jun", "Juni", "June", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 6
            Case "Jul", "Juli", "July", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 7
            Case "Aug", "August", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 8
            Case "Sep", "September", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 9
            Case "Okt", "Oktober", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM"), "Oct", "October"
                intMonat = 10
            Case "Nov", "November", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM")
                intMonat = 11
            Case "Dez", "Dezember", Format(DateSerial(Year(Date), 1, 1), "MMM"), _
                  Format(DateSerial(Year(Date), 1, 1), "MMMM"), "Dec", "December"
                intMonat = 12
            Case Else
              Exit Function
          End Select
          'Ergebnis auf gültiges Datum prüfen
          If IsDate(Format(intJahr, "0000") & "-" & Format(intMonat, "00") & "-" _
                  & Format(intTag, "00")) Then
            fncDatumUmwandlung = DateSerial(intJahr, intMonat, intTag)
          End If
        End If
      End If
  End Select
End Function



  

Betrifft: AW: Kalenderdaten umwandeln von: czender
Geschrieben am: 01.09.2014 18:12:16

Hallo Franz,

erstmal vielen Dank für die viele Mühe, die du dir gemacht hast. Ich stehe nur leider auf dem Schlauch was ich damit machen soll.

Hab es jetzt unter "Diese Arbeitsmappe" eingefügt, aber wenn ich dann in die entsprechende Zelle =fnc usw. eingebe, tut sich nichts. Was mache ich da falsch?

Das sieht ja aus, als wäre es eine selbstprogrammierte Funktion, die ich in der Zelle ausführe, in der das Ergebnis stehen soll.

Ich fürchte du musst mir genau erklären was ich tun muss, damit ich wenn ich die Funktion in Tabelle2!D1 schreibe sie das was in Tabelle2!C1 steht umwandelt und sie auch bis Tabelle2!C2345 kopieren kann.

Gruß
Christian


  

Betrifft: AW: Kalenderdaten umwandeln von: UweD
Geschrieben am: 02.09.2014 08:46:44

Hallo

- Das Makro in ein Standard- Modul setzen...


- In der Tabelle dann die Formel so wie angegeben..
- Runtercopieren


Tabelle1

 ABCD
1    Ist-ZustandFormelausgabe
2    ???? 
3    24. Aug 1424.08.2014
4    24 July 201424.07.2014
5    Aug 1431.08.2014
6    July 201431.07.2014
7    201431.12.2014

verwendete Formeln
Zelle Formel Bereich
D2 =fncDatumUmwandlung(C2) 

Tabellendarstellung in Foren Version 5.49


Gruß UweD


  

Betrifft: AW: Kalenderdaten umwandeln von: czender
Geschrieben am: 02.09.2014 09:00:23

Hallo Uwe,

danke erstmal.
Habe leider aufgrund dieses Problems hier
https://www.herber.de/forum/messages/1379428.html
im Moment keine Daten in der Tabelle, mit denen ich es testen kann. Muss also leider mit deiner Lösung abwarten, bis ich eine Lösung für das andere Problem hab.

Gruß
Christian


 

Beiträge aus den Excel-Beispielen zum Thema "Kalenderdaten umwandeln"