Microsoft Excel

Herbers Excel/VBA-Archiv

Geburtsdatum aus Text | Herbers Excel-Forum


Betrifft: Geburtsdatum aus Text von: bernie
Geschrieben am: 20.02.2012 20:40:39

Hallo VBA-ler

ich versuche gerade aus einer Tabelle, welche in den Spalten die blödesten Daten enthält, die Gebrurtsdaten zu extrahieren.

Mit der Excel Formel
=WENN(ODER(RECHTS(A2;1)="1";RECHTS(A2;1)="8";RECHTS(A2;1)="2";RECHTS(A2;1)="4");RECHTS(A2;10))
komme ich da nicht weiter, da auch andere Texte denen eine Ziffer nachgestellt ist, ausgelesen werden.
Ganz blöd wird es, wenn die Zelle in A weniger als 10 Zeichen enthält.
Vielleicht hat ja jermand eine zundende Idee.

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

Im Voraus besten Dank Bernie

  

Betrifft: Prüfe auf Datwert() ... von: Matthias L
Geschrieben am: 20.02.2012 20:46:35

Hallo

... und werte es aus

Tabelle1

 ABCD
1ObjekteObjekte#WERT! 
2huber, manfred, 12.03.195812.03.195821256;o)
374365, Wiesbaden, Goethestraße, 2estraße, 2#WERT! 

Formeln der Tabelle
ZelleFormel
B1=RECHTS(A1;10)
C1=DATWERT(B1)
B2=RECHTS(A2;10)
C2=DATWERT(B2)
B3=RECHTS(A3;10)
C3=DATWERT(B3)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

Wenn kein Fehler dann Datum

Gruß Matthias


  

Betrifft: Mein Lieblingspattern ;-) von: ransi
Geschrieben am: 20.02.2012 20:49:52

HAllo

Wenn du etwas VBA einsetzten kannst wids einfach.
Schau mal ob du dich hiermit anrfeunden kannst:

Tabelle1

 AB
1Objekte 
2huber, manfred, 12.03.195812.03.1958
374365, Wiesbaden, Goethestraße, 2 
4abc 1.1.191101.01.1911
5efg 30.02.64 hij 

Formeln der Tabelle
ZelleFormel
B1=extract_erstes_Datum(A1)
B2=extract_erstes_Datum(A2)
B3=extract_erstes_Datum(A3)
B4=extract_erstes_Datum(A4)
B5=extract_erstes_Datum(A5)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4


Und diesen kleinen Code in ein Modul:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************



Option Explicit

Public Function extract_erstes_Datum(zelle)
    Dim Regex As Object
    extract_erstes_Datum = ""
    Set Regex = CreateObject("VbScript.Regexp")
    With Regex
        .Pattern = "(((0?[1-9]|[12][0-9])\.(0?[1-9]|1[0-2])\.)|(30\.((0?[13-9])|(1[0-2]))\.)|(31\.(0?[13578]|1[02])\.))((19|20)\d{2}|\d{2})"
        If .test(zelle.Text) = True Then _
            extract_erstes_Datum = CDate(.Execute(zelle.Text)(0))
    End With
End Function



ransi


  

Betrifft: AW: Mein Lieblingspattern ;-) von: bernie
Geschrieben am: 20.02.2012 21:24:16

Hallo Ransi,

diese Funktion läuft perfekt durch, jetzt habe ich nur das Probelm, daß aus der Spalgte A die Geburtsdaten entfernt werden sollen.
über =links(A1;länge(a1)-Länge(b1) ) funktioniert das nicht, daß das Datum bedingt durch den DATWERT() nur 5 Zeichen lang ist.
Bernie


  

Betrifft: regex is geil ;-) von: ransi
Geschrieben am: 20.02.2012 21:51:21

HAllo

HAb ich das so richtig verstanden ?


Tabelle1

 AB
1huber, manfred, 12.03.1958huber, manfred, #####
274365, Wiesbaden, Goethestraße, 274365, Wiesbaden, Goethestraße, 2
3abc 1.1.1911 hij 27.5.2008 klmabc ##### hij ##### klm
4efg 30.02.64 hijefg 30.02.64 hij
5  

Formeln der Tabelle
ZelleFormel
B1=machs(A1)
B2=machs(A2)
B3=machs(A3)
B4=machs(A4)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4


und den Code wie eben in ein Modul:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit



Public Function machs(zelle)
    Dim Regex As Object
    machs = zelle.Text
    Set Regex = CreateObject("VbScript.Regexp")
    With Regex
        .Pattern = "(((0?[1-9]|[12][0-9])\.(0?[1-9]|1[0-2])\.)|(30\.((0?[13-9])|(1[0-2]))\.)|(31\.(0?[13578]|1[02])\.))((19|20)\d{2}|\d{2})"
        .Global = True
        If .test(zelle.Text) = True Then _
            machs = .Replace(zelle.Text, "#####")
    End With
End Function



ransi


  

Betrifft: sofern das Datum immer rechts steht immer ... von: Matthias L
Geschrieben am: 20.02.2012 21:13:25

Hallo

Hier nochmal 2 eventuelle Möglichkeiten

Tabelle1

 ABC
1Objekt1  
2huber, manfred, 12.03.195812.03.195812.03.1958
374365, Wiesbaden, Goethestraße, 2  
4Objekt2  
5huber, manfred, 12.03.195912.03.195912.03.1959
674365, Wiesbaden, Goethestraße, 3  
7Objekt3  
8huber, manfred, 12.03.196012.03.196012.03.1960
974365, Wiesbaden, Goethestraße, 4  
10Objekt4  
11huber, manfred, 12.03.196112.03.196112.03.1961
1274365, Wiesbaden, Goethestraße, 5  

Formeln der Tabelle
ZelleFormel
B1=WENN(ISTFEHLER((RECHTS(A1;10))*1);"";RECHTS(A1;10))
C1=WENN(ISTFEHLER(DATWERT(RECHTS(A1;10)));"";RECHTS(A1;10))
B2=WENN(ISTFEHLER((RECHTS(A2;10))*1);"";RECHTS(A2;10))
C2=WENN(ISTFEHLER(DATWERT(RECHTS(A2;10)));"";RECHTS(A2;10))
B3=WENN(ISTFEHLER((RECHTS(A3;10))*1);"";RECHTS(A3;10))
C3=WENN(ISTFEHLER(DATWERT(RECHTS(A3;10)));"";RECHTS(A3;10))
B4=WENN(ISTFEHLER((RECHTS(A4;10))*1);"";RECHTS(A4;10))
C4=WENN(ISTFEHLER(DATWERT(RECHTS(A4;10)));"";RECHTS(A4;10))
B5=WENN(ISTFEHLER((RECHTS(A5;10))*1);"";RECHTS(A5;10))
C5=WENN(ISTFEHLER(DATWERT(RECHTS(A5;10)));"";RECHTS(A5;10))
B6=WENN(ISTFEHLER((RECHTS(A6;10))*1);"";RECHTS(A6;10))
C6=WENN(ISTFEHLER(DATWERT(RECHTS(A6;10)));"";RECHTS(A6;10))
B7=WENN(ISTFEHLER((RECHTS(A7;10))*1);"";RECHTS(A7;10))
C7=WENN(ISTFEHLER(DATWERT(RECHTS(A7;10)));"";RECHTS(A7;10))
B8=WENN(ISTFEHLER((RECHTS(A8;10))*1);"";RECHTS(A8;10))
C8=WENN(ISTFEHLER(DATWERT(RECHTS(A8;10)));"";RECHTS(A8;10))
B9=WENN(ISTFEHLER((RECHTS(A9;10))*1);"";RECHTS(A9;10))
C9=WENN(ISTFEHLER(DATWERT(RECHTS(A9;10)));"";RECHTS(A9;10))
B10=WENN(ISTFEHLER((RECHTS(A10;10))*1);"";RECHTS(A10;10))
C10=WENN(ISTFEHLER(DATWERT(RECHTS(A10;10)));"";RECHTS(A10;10))
B11=WENN(ISTFEHLER((RECHTS(A11;10))*1);"";RECHTS(A11;10))
C11=WENN(ISTFEHLER(DATWERT(RECHTS(A11;10)));"";RECHTS(A11;10))
B12=WENN(ISTFEHLER((RECHTS(A12;10))*1);"";RECHTS(A12;10))
C12=WENN(ISTFEHLER(DATWERT(RECHTS(A12;10)));"";RECHTS(A12;10))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

Gruß Matthias


  

Betrifft: AW: sofern das Datum immer rechts steht immer ... von: bernie
Geschrieben am: 20.02.2012 21:35:17

Hallo Matthias,

die Formel funtioniert. Jetzt ist nur noch das Probem, wie ich aus den A-Zellen die Geburtsdaten entfernen kann.
Gruß Bernie


  

Betrifft: AW: sofern das Datum immer rechts steht immer ... von: bernie
Geschrieben am: 20.02.2012 21:35:22

Hallo Matthias,

die Formel funtioniert. Jetzt ist nur noch das Probem, wie ich aus den A-Zellen die Geburtsdaten entfernen kann.
Gruß Bernie


  

Betrifft: AW: sofern das Datum immer rechts steht immer ... von: Reinhard
Geschrieben am: 20.02.2012 21:53:56

Hallo Bernie,

B1:
=WENN(ISTFEHLER(FINDEN(".";A1));WENN(ISTFEHLER(FINDEN(".";A1;FINDEN(".";A1)+1));"");TEIL(A1; FINDEN(".";A1)-2;10))
C1:
=WECHSELN(A1;B1;"")

nach unten kopieren.

Gruß
Reinhard


  

Betrifft: einer geht noch ;-) von: CitizenX
Geschrieben am: 20.02.2012 23:15:22

Hi,

Option Explicit

Function Get_Date(ByVal strZelle As String, Optional oRegex As Object)
    Set oRegex = CreateObject("VBscript.regexp")
    Get_Date = strZelle
    oRegex.Global = True: oRegex.Pattern = "[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{2,4}"
    If oRegex.Test(strZelle) Then If IsDate(oRegex.Execute(strZelle)(0)) Then Get_Date = oRegex.Replace(strZelle, " ")
End Function


Grüße
Steffen


  

Betrifft: AW: einer geht noch ;-) von: CitizenX
Geschrieben am: 20.02.2012 23:18:40

da war noch Rest(Müll) drin ;-) ... so:

Option Explicit

Function Get_Date(ByVal strZelle As String, Optional oRegex As Object)
    Set oRegex = CreateObject("VBscript.regexp")
    Get_Date = strZelle
    oRegex.Global = True: oRegex.Pattern = "[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{2,4}"
    If oRegex.Test(strZelle) Then Get_Date = oRegex.Replace(strZelle, " ")
End Function


Grüße
Steffen


  

Betrifft: ich werd zum.. von: CitizenX
Geschrieben am: 20.02.2012 23:25:39

..Alleinunterhalter :-))

mein erster Post war schon richtig, es muss natürlich geprüft werden ob es sich um ein gültiges Datum handelt..

Gute Nacht..