2016-08-12 3 views
2

Ich habe eine Timestamp-Spalte, die im Format "Aug 01 2016 - 13:46" kommt. So formatieren Sie es wie ein Datum, weil ich nicht den Zeitstempel müssen, ich bin immer loszuwerden, die Räume und die Zeitstempel,Konvertieren von Zeitstempel zu Datum Excel

(SUBSTITUTE(LEFT(A2,LEN(A2)-8)," ","")) 

und dann

DATE(YEAR(RIGHT(C2,4)),MONTH(VLOOKUP(LEFT(C2,3),$H$2:$I$13,2,FALSE)),DAY(IF(ISNUMBER(MID(C2,4,1)),MID(C2,4,2),MID(C2,5,2)))) 

tun, wo ich Grabbing die richtigen 4 Ziffern als Jahr, machen einen vlookup für die Monatszeichenfolge und erhalten dann die mittleren Ziffern für den Tag (die IF-Anweisung ist, weil gelegentlich der Monat länger als 4 Zeichen ist). Mein Ergebnis ist "1/12/05" Kann nicht herausfinden, was ich falsch mache, und würde jede Hilfe so schätzen! Würde verwenden in der Regel Strftime in R, aber der Datensatz ist winzig :)

Dank

+0

'= DateValue (Links (A2, 12))' – Slai

+0

meine schlechte .. das Datum wird ein Komma vor dem Jahr '" Aug 01, 2016 "brauchen, aber das funktioniert' = TEXT (SUBSTITUTE (A2, (",", "),", -, "," "," m/d/y ")' – Slai

+0

@Slai Vielleicht sollten Sie das OP noch einmal lesen - diese Formel ist bei weitem nicht die Transformation, die OP erfordert. – pnuts

Antwort

2

Bitte versuchen:

=DATE(MID(A2,FIND(" -",A2)-5,5),VLOOKUP(LEFT(A2,3),$H$2:$I$13,2,0),MID(A2,FIND(" -",A2)-7,2)) 

Es kann eine viel kürzere Version sein, aber ich bin neugierig auf die anderen Format/s du zeigst nicht (und was ist in H2: I13) und ich habe versucht, deinen Ansatz zu "respektieren".

Eine kürzere Version (ohne die Notwendigkeit eine SVERWEIS):

=DATEVALUE(MID(A2,FIND(" -",A2)-7,2)&"-"&LEFT(A2,3)&"-"&MID(A2,FIND("-",A2)-5,5)) 

Die längere Version oben verwendet eine Nachschlagtabelle (H2: I13), wo die ersten drei Zeichen des Datumsstempels in eine Zahl umgewandelt werden den relevanten Monat darstellen. Dies vermeidet, was sonst eine Komplikation aufgrund von Längeninkonsistenz in der Monatsangabe wäre.

Das Jahr und der Tag werden durch ihre Beziehung zum Bezugspunkt eines Leerzeichen/Bindestrich-Paars ermittelt. Relativ dazu beginnt das Jahr vier Zeichen früher (und ist von der Länge vier).

Das Raum/dash Paar (nur der Strich ausreichend gewesen als Bezugspunkt würde) beginnt bei dem zwölften Zeichen für das Beispiel, wie sie durch:

FIND(" –",A2) 

Aus diesem Ergebnis (dh 12) 5 wird abgezogen, um zum Jahresanfang zurückzurechnen. (Eigentlich der Platz vor Beginn des Jahres, aber das ist egal). Vom Platz vor dem Jahr ist das Jahr fünf Zeichen lang, wobei dies die Länge der Zeichenfolge aus A2 durch extrahiert:

MID(A2,FIND(" -",A2)-5,5) 

Der Tag (01 zum Beispiel) wird in ähnlicher Weise extrahiert und dann die drei Stücke (Jahr, SVERWEIS-Ergebnis und Tag) und als Parameter in die =DATE Funktion eingespeist.

Die kürzere Version vermeidet die Notwendigkeit einer Lookup-Tabelle von concatenating, in der Mitte des Jahres und Tag (in ähnlicher Weise wie für die lange Version extrahiert), wobei die ersten drei Zeichen der Datumsstempel, erhalten von:

LEFT(A2,3) 

umgeben von - auf jeder Seite.

(siehe LEFT, die effektiv eine leicht vereinfachte Form von MID ist, wie an anderer Stelle verwendet).

Das Ergebnis ist eine Zeichenkette, aber in einem Format, das von Excel erkannt wird, und eines, das die praktische Funktion in einen Datums-/Uhrzeitwert umwandeln kann.

Dies wäre viel einfacher wäre die Daten konsistenter (dh immer drei Buchstaben für den Monat).

+1

ah - Die Werte in der Suche sind die ersten drei Buchstaben des Monats, und die entsprechende Monats-Integer. Das funktioniert! Vielen Dank! – Julia

1

(Edit: Diese Antwort kann nicht vor Excel 2016 Versionen arbeiten, wie unten durch @pnuts in den Kommentaren darauf hingewiesen.)

Die Lösung @pnuts Werke gab in Ordnung, aber hier eine kürzere, einfachere zu betrachten:

=VALUE(SUBSTITUTE(LEFT(A2,11)," ",", ",2)) 

Dies nimmt die LEFT 11 Zeichen (Aug 01 2016) und verwendet dann SUBSTITUTE ein Komma zu dem zweiten Raum hinzuzufügen (die zweiten " " wird ", "). Excel ist dann schlau genug, um dies als ein Datum zu interpretieren, wenn Sie VALUE anwenden.

Nun, wenn Sie nicht garantieren, dass es genau 11 Zeichen wegen unterschiedlicher Länge Monat Namen, eine Ziffer Tag Werte oder zweistellige Jahr Werte (ein Rand Fall, wo die Lösung von @ Pnuts würde scheitern), dann Sie können an folgende ändern:

=VALUE(SUBSTITUTE(LEFT(A2,SEARCH("-",A2)-2)," ",", ",2)) 

der einzige Unterschied ist, dass hier wir SEARCH("-",A2) finden verwenden, wo der Bindestrich auftritt und zwei Zeichen von dieser Stelle sichern, anstatt eine hart codierte 11 zu verwenden.

Mit FIND anstelle von SEARCH funktioniert auch. Der Unterschied zwischen diesen beiden ist, dass FIND Groß-und Kleinschreibung ist, während SEARCH nicht ist. Mit DATEVALUE in der Formel statt nur VALUE würde auch funktionieren, aber das letztere speichert ein paar Zeichen.

+1

Ich weiß nicht, ob Sie das getestet haben, und wenn ja, welche Daten Sie verwendet haben, aber von den Daten des OP wissen wir nur "01.08.2016 - 13: 46" und * gelegentlich wird der Monat länger als 4 Zeichen * sein. Für Letzteres wählte ich "August 01 2016 - 13: 46". Für mich funktionieren beide meine Formeln mit solchen Daten, aber keine Ihrer Formeln für beide Beispiele – pnuts

+1

Ich habe mehrere Varianten getestet und sie haben für mich gut funktioniert. Denkst du, es könnte ein Versions-Problem sein? Ich benutze Excel 2016. Vielleicht wurde die Datums-String-Erkennung von Excel schlauer. –

+0

Ich benutze 2013 so * vielleicht * aber ich würde r v unwahrscheinlich - Scheint es wert, meine (a) nochmals zu überprüfen! und (b) mehr als nur einen "schnellen Blick" zu haben. – pnuts

Verwandte Themen