2016-05-10 1 views
3

Ich bekomme immer die Daten wie in Spalte A gezeigt, aber ich brauche sie wie in Spalte C gezeigt. Wie kann ich es tun, ohne erstellen zu müssen Spalte B Helfer? Ich brauche das, weil die Stunden und Minuten vermasseln, was ich danach erreichen will.
So entfernen Sie Stunden und Minuten aus Daten in einem Schritt Excel-VBA

Spalte A

Zeit mit Stunden und Minuten:

22/05/2015 14:57 
11/06/2015 15:40 
28/05/2015 08:27 
26/05/2015 14:51 
25/05/2015 14:18 
25/05/2015 15:51 

Spalte C

Zeit ohne Stunden und Minuten:

22/05/2015 
11/06/2015 
28/05/2015 
26/05/2015 
25/05/2015 
25/05/2015 

ich es geschafft, dieses Problem zu lösen, indem eine Spalte B zu schaffen, die

=Text(A2;"DD-MM-AAAA") 

in Text konvertiert und dann Spalte C wandelt Text

=Data.value(B2) 

zu schätzen Während dieser Prozess funktioniert, es macht mir viel unnötige Daten und ich frage mich, ob ich dies automatisch mit einem Makro in einem Schritt tun kann. Ich möchte auch die Anzahl Daten in Spalte C immer gleich der Anzahl der Daten in Spalte A und Termine in der gleichen Reihenfolge.

+1

'links (a1,10)' gelassen ?. – findwindow

+2

Warum nicht einfach Spalte ** A ** neu formatieren, um die Zeit zu verbergen? –

+2

@findwindow gute Idee, aber die LINKE Funktion wird für _string_ Manipulation verwendet, so würden Sie es in eine DATEVALUE-Funktion "= DATUMWERT (LINKS (A1,10))" –

Antwort

3

Dies wurde mit [Excel-VBA] getaggt, so dass ich eine vollständige Spalte Zeit Stripping-Lösung anbieten werde.

Die Range.TextToColumns method macht schnelle Arbeit von dem Datumsteil eines Datum Abstreifen. Die Fieldinfo Parameter können das DMY-Format angeben, die Sie verwenden und den Zeitabschnitt mit den entsprechenden xlColumnDataType verwerfen. Während die meisten TextToColumns-Befehle 'an Ort und Stelle' sind, ist ein alternatives Ziel verfügbar, falls angegeben. Wenn Sie ein alternatives Ziel angeben, bleiben die ursprünglichen Daten erhalten.

Option Explicit 

Sub stripTime() 
    Dim i As Integer 
    With Worksheets("Sheet1") 
     'check to see if A1 is a date or a column text label 
     i = Abs(Not IsDate(.Cells(1, 1).Value)) 
     With .Range(.Cells(1 + i, "A"), .Cells(.Rows.Count, "A").End(xlUp)) 
      .TextToColumns Destination:=.Cells(1, "C"), DataType:=xlFixedWidth, _ 
          FieldInfo:=Array(Array(0, xlDMYFormat), Array(10, xlSkipColumn)) 
      'optionally assign a custom number format 
      .Offset(0, 2).NumberFormat = "[color10]dd-mmm-yyyy_)" 
      'optionally autofit the column width 
      .Offset(0, 2).EntireColumn.AutoFit 
     End With 
    End With 
End Sub 

Nach der Verarbeitung Sie mit Ihrem ursprünglichen Datetimes in Spalte A und wahre Datums nur Werte in Spalte C

strip_date_out_of_datetime

+1

Wow, das ist genau das, wonach ich gefragt habe! –

14

das Datum Um nur verwenden:

=INT(A2) 

und das Format auf dem Laufenden. Dies funktioniert, weil Daten in Excel die Anzahl der Tage seit dem 31. Dezember 1899 sind, also zum Beispiel der 10. Mai 2016 ist 42500 Tage seit.

und die Zeit ist eine Dezimalzahl auf 24 Stunden berechnet. Also, 10. Mai 2016 12:00:00 entspricht 42500,5.

Also nur das Datum bekommen wir das Dezimalsystem zu entfernen. INT() macht genau das.

+0

Ich fühle mich ausgelaugt, weil ich das nicht gefunden habe: O. Das ist Formel funktioniert perfekt! –

+1

@carlos_cs wir alle haben Momente, in denen wir das Problem überdenken und es komplizierter machen, als es sein muss. Manchmal braucht es andere, um auf die einfachere Methode hinzuweisen. –

+0

@carlos_cs lol _we_ alle fühlen sich mit Scott überlistet^_ ^; Edit: Ich sollte nicht sagen wir aber _I_. – findwindow

Verwandte Themen