Excel - DateTime text to Column - excel

I have multiple rows of datetime data.
For eg:
1/10/2014 10:10
2/3/2015 00:03
12/3/2015 12:03
4/3/2015 08:03
2/3/2015 14:03
6/3/2015 22:03
29/03/15 08:03:40
20/03/15 19:03:25
The first 6 rows seems to have been recognized as DateTime by Excel, whereas the 7th and 8th row seem to be in text format.
I'm not able to perform any datetime calculations on it.
I tried Text to Column, but that doesn't give me the option to keep the Date and Time together.
Please advise.

Use the Text to Columns tool and let the data be split into two columns. In step 3 define the date order as DMY (the order that the source data is in).
Then create a new column where you add the Date and time to get everything back into one column again. Copy, paste values, delete individual date and time columns.

If you cannot change the localization on your PC (or don't want to because it will mess up other things), you can always import this as text and then coerce the data into a date/time based on the known format. I don't know of any date parse function in Excel, so you may have to do it the brute force way:
=DATE(MID(A1,7,2)+2000,MID(A1,4,2),LEFT(A1,2))+TIMEVALUE(RIGHT(A1,8))
Because you have multiple formats on your input, you may actually be forced into this. If you want it to work universally on all dates, a UDF would probably be a good idea.

Excel parsed your date as:
mm/dd/yyyy hh:mm
as Excel Default. You can possibly overwrite that by trying what Teylyn have posted.
For example your 1st date: 1/10/2014 10:10 is interpreted as January 10, 2014 and not October 1, 2014.
What you need to do is identify and standardized your date format first.
Once you've done that, we can help you how to move forward in getting your dates correctly on the cells.

Related

Correct date format using VBA to import XML

I'm currently working on a spreadsheet for analysing data exported from the online t-card system we use. This exports all of its data in XML format.
To import this data I use a macro to save it all to another worksheet and convert most of the columns to values, as they are all stored as text. However the problem I'm having is converting the text in the date columns to actual dates. I'm using this code to convert to dates:
With ActiveSheet.UsedRange.Columns("U").Cells
.NumberFormat = "dd/mm/yyyy"
.Value = .Value
End With
While this works for some dates where the day is greater than 12, for others where it is 12 or less, it is using the day as the month and vice versa.
For example, when using the following XML entry:
<TCard>
<Ref>*****</Ref>
<CUSTOMER_NAME>*****</CUSTOMER_NAME>
<ORDER_NUMBER>*****</ORDER_NUMBER>
<ACCOUNT_NUMBER>*****</ACCOUNT_NUMBER>
<ITEM_NUMBER_DELIVERY_AREA>*****</ITEM_NUMBER_DELIVERY_AREA>
<Description>PFC 230 X 90 / 5 # 12.2</Description>
<Colour>Stock Bar PP</Colour>
<SlotPosition>35</SlotPosition>
<RowTitle></RowTitle>
<AssignedDate>20/02/2017</AssignedDate>
<EndDate />
<AssignedColumnTitle>Monday</AssignedColumnTitle>
<Locked>False</Locked>
<Order_Date>17/02/2017</Order_Date>
<Due_Date>21/02/2017</Due_Date>
<Weight_kg>1972</Weight_kg>
<DrillSaw_Time>-</DrillSaw_Time>
<Blaster_Time>-</Blaster_Time>
<Saw_Time>-</Saw_Time>
</TCard>
When the macro runs it will give the assigned date as 20/02/2017 for this entry, which is correct, however on another where the assigned date is 08/03/2017 (8th March 2017), the macro changes this to 03/08/2017 (3rd August 2017).
Unfortunately I don't think other methods that suggest using trimmed inputs will work as dates over the 12th of each month are correct.
Is there a way for the macro to change the date stored as text to DD/MM/YYYY format only from the XML?
Apologies in advance if there is something glaringly obvious that I am missing, I've only learned basic VBA nessacery for this project

Formatting Existing Excel Cells to Time Format Without Date

I'm working on an excel 2010 sheet where I mark down the date and time an event happens. The date is in one column, and auto formats to 17-Nov when I would type in 11-17 (I was fine with this). The time is in a separate column.
I am trying to find the average time an event occurred, without regard to the date, so I would use =AVERAGE(C1:C10). However, I only receive a date back (like 17-APR).
I did not format the cells before I began to enter in data, and I would simply type in a 3:27pm event as 1527, and no reformatting would happen.
Now, when I attempt to reformat the column to hhmm, all the numbers entered so far turn to 0000. When I try to edit the 0000, it is formatted as 6/13/1906 12:00:00 AM.
What I want to do is have the time formatted as hhmm and not include a date in the cell, and be able to run formulas on it, such as the average time an even occurred.
Summary:
*Currently time is entered simply as ####. I entered 3:27pm as 1527.
*Trying to reformat the time column results in 0000 in all cells in the column that previously had a ####.
*Modifying the 0000 displays as 6/13/1906 12:00:00 AM
*I want to format the time as hhmm so I can simply type in 2357, and have it display as 2357, but understand I mean 11:57pm, and let me take averages.
*Hell, even being able to enter 1547 and have it auto format to 15:47 or 3:47p would be great.
Thanks for reading my question!
An easy way to apply an autoformat (though Excel won't see it as a true "Time") is to go into Format Cells>Custom> and use ##":"##. This will turn 1245 into 12:45. Mind you, this will be a text string so if you copy it to another cell and then apply a time, it will show as 12:00:00. Excel will also not be able to run formulas on it, but it's a quick and dirty way to make it look pretty.
Another option is to have a formula such as =TIME(LEFT(A1,2),RIGHT(A1,2),) where A1 would be replaced with the cell you are actually referencing. This will convert the number to a time that Excel will recognize as a time allowing you to run other functions on it, but requires another column.
If you are entering the times as 4-digit numbers, you'll need to do a calculation to get the hours and minutes, then use the TIME function to get an actual time:-
=TIME(A1/100,MOD(A1,100),0)
Another way is
=LEFT(A1,2)/24+RIGHT(A1,2)/1440
but then you have to format the result as a time.
Excel sees a number like 1547 as approximately 4 years on from 1st January 1900 if you format it as a date, so it will come out as something like 26/3/1904 in UK format or 3/26/1904 in US-style format.
Note that the time function can only give you values up to 23:59:59 (stored as 0.999988426), but the second method will give you a datetime value with one or more days as the whole number part. This can be useful if you want to do calculations on times spanning more than one day.
The above behaviour is because dates and times are stored as real numbers with the whole number part representing days and the decimal part representing fractions of a day (i.e. times). In spite of misleading information from Microsoft here, dates actually start from 31/12/1899 (written as 0/1/1900) with serial number 0 and increment by 1 per day from then on.

Text to Columns formatting issues with Date/Time

I am trying to figure out if this is an Excel bug or just a formatting issue. So I have a column with a date and time in the format m/d/yyy h:m AM/PM (ie. 10/21/2015 2:21:00 PM), and am trying to split it into two individual columns: one with the date and one with the time. I tried using fixed width first, but ended up using delimited just so I could split it exactly where I wanted.
For some reason when it splits the two up, the actual value for time changes. I will end up with one column with the date and a time of 12am (10/21/2015 12:00 AM) and one column with the initial time minus 12 hours (2:21:00 AM).... Trying to figure out why there is still a time value in the date column and why the time value changes. Ideally I want to have a column with 10/21/2015 and another with 2:21:00 PM.
I've tried changing the format of the initial date/time combination etc. and it keeps on subtracting 12 hours from the initial time when it splits.
Has anybody experienced or heard of similar issues?
I think your question is confusing, for example I tried using fixed width first, but ended up using delimited just so I could split it exactly where I wanted. seems back-to-front, but you have a datetime value for October 21, 2015 14:21 hrs, want that as a date in one column and 02:21:00 PM in the next and your environment is UK style (ie day before month).
IF so Text to Columns may be as confusing as helpful. Format the date column as date (to suit) and the time column as hh:mm:ss AM/PM (or similar) and the following formulae may suit, assuming your datetime value is in A1:
For date: =INT(A1)
For time: =MOD(A1,1)

How to convert a date entered as a string to a Date type in Excel?

I have a large spreadsheet that contains, among other things, date entries in the form of:
Fri, 03 May 2013 07:04:46 GMT
I haven't been able to find a way, within Excel proper, to manipulate this down to a date object it recognizes. The problem is, I don't extract the spreadsheet or have any control over how this data is provided, and there are a LOT of entries -- to many to manually change them. Further, while my first thought is to simply crank out a Perl script to roll through and do it for me, this won't do because I'm just prototyping a process that will be handed off to someone that wouldn't know Perl from Pearl. It needs to be something doable only in Excel, and other than sorting and basic equations and such, I'm pretty much an excel noob.
My require is simply that I need to be able to sort the column contain these values as a date.
Thanks!
If there are specifically three characters for the month, then you could use:
=DATEVALUE(MID(A1,6,11))+TIMEVALUE(MID(A1,18,8))
Format the Cell to a Date, using something like dd/mm/yyyy hh:mm:ss if you want to confirm that the time is correctly interpreted.
If you don't need the time then just omit the +TIMEVALUE().
You can use =LEFT, =MID and =RIGHT to extract the different parts of the string, and manipulate them further. The string format isn't unambiguous from your example, but I'm assuming that it's 3-char weekday, dd mmm yyyy date, and hh:mm:ss time.
If your data is in column A:
=LEFT(A1, 3)
returns Fri
=MID(A1, 6, 11)
returns 03 May 2013, and =VALUE() on that returns the date serial number for 3 May 2013.

.NumberFormat sometimes returns the wrong value with dates and times

It seems that every week or so someone posts a question about dates being converted (corrupted?) to American format. Like many others, I have attempted to help but the problem is elusive. I now wonder if I have discovered the cause.
I am working on an application in which I need to extract data from an Excel worksheet and output it as strings formatted to match the value the Excel user can see. So if the value is “1” formatted to display as “1.00” then I want the string to be “1.00”.
I achieve this effect by testing the cell value to be a number, date or time. If it is, I retrieve the number format and use it to format the cell value so:
With .Cells(Row, Column)
Output string = Format(.Value, .NumberFormat)
End With
In most cases this gives me exactly the output I require. However, sometimes I get American dates and times when the source is formatted as a UK date or time.
After much experimentation with Excel 2003 and Excel 2007, I have discovered the cause. (I do not have access to Excel 2010 but from questions I deduce it has the same problem.) This question is in part intended to reveal this problem to the world because I can discover nothing on the internet to indicate that anyone else has noticed it. (No doubt someone will reply that they googled “xyz” and got the answer immediately.) However, the main purpose of this question is to seek suggestions for obtaining the result I need in all situations.
Typically I enter dates as, for example, “23mar12”. Excel recognises this as a date and formats it as “23-Mar-12”. I can select Format Cells and enter or select a custom format or select one of the date formats so I can have any format I can imagine wanting including non-English names for days and months.
However, in one case the format I select is not the format that is recorded: Custom format “dd/mm/yyyy” is recorded as Date format “* 14/03/2001”. This is not obviously a problem until further down the line.
I created a column of dates and times and formatted each with a different custom or standard format. I wrote a macro to extract the NumberFormat for each of these dates and times and write it as a string to an adjacent column. I also formatted the value using the number format and wrote that string to a third column.
In a number of cases the format selected and recorded by Excel was not the format returned by NumberFormat:
Excel format NumberFormat
Date: * 14/03/2001 m/d/yyyy
Date: * 14 March 2001 [$-F800]dddd, mmmm dd, yyyy
Date: 14/03/2001 dd/mm/yyyy;#
Date: 14/03/01 dd/mm/yy;#
Date: 14/3/01 d/m/yy;#
Date: 14.3.01 d.m.yy;#
Date: 2001-03-14 yyyy-mm-dd;#
Date: 14 March 2001 (1) [$-809]dd mmmm yyyy;#
Date: 14 March 2001 (2) [$-809]d mmmm yyyy;#
Custom: hh:mm:ss h:mm:ss
Time: * 13:30:55 [$-F400]h:mm:ss AM/PM
Time: 13:30:55 (1) hh:mm:ss;#
Time: 13:30:55 (2) h:mm:ss;#
Time: 01:30:55 PM [$-409]hh:mm:ss AM/PM;#
Time: 1:30:55 PM [$-409]h:mm:ss AM/PM;#
The values (1) and (2) in the Excel format column were added by me to indicate that there are two apparently identical formats. As can be seen from the NumberFormat column, in each case the second version suppresses a leading zero.
Most changes have no important effect. “[$-F800]” and so on are apparently dummy values with no effect. Apparently you can replace “F800” with an Microsoft country code to have the names of days and months translated to the language of that country.
However, the three standard formats that Microsoft marks with an asterisk are changed unacceptably. The dates are changed from little endian to middle endian; the time is changed from 24 hour to 12 hour and the day of the week has been added to “* 14 March 2001”.
The asterisk against the dates, references the comment: “Except for items that have an asterisk () in the Type list (Number tab, Format Cells dialog box), date formats that you apply do not switch date orders with the operating system.” The asterisk against the time, references the comment: “Except for items that have an asterisk () in the Type list (Number tab, Format Cells dialog box), time formats that you apply do not switch time orders with the operating system.”
If I have to, I can warn my users that standard date and time formats may not give the result desired. However, if they want the popular format “dd/mm/yyyy”, they cannot have it. “dd-mm-yyyy”, for example, is OK but custom format “dd/mm/yyyy” becomes date format “* 14/03/2001” becomes “m/d/yyyy”.
Returning to my opening point: is this strange handling of one particular date format the reason so many people claim their dates are sometimes being converted to American format and is this why the problem is so elusive? I have come across this type of problem elsewhere of one group of Microsoft programmers not knowing what another group are doing. Is this why some functions always work and other sometimes don’t? Some Microsoft programmers know where to look for the correct format and others don’t?
More importantly, for me, can anyone suggest:
How I obtain the true date or time format?
Some other way of determining the user’s chosen display format for a date or time?
BTW 1: I recall that thirty or so years ago I was told that the American military do not use month/day/year format; only American civilians use this format. Can anyone tell me if this is true?
BTW 2: The similar problem is with Excel colours. Excel holds its colours as "ggbbrr" while everybody else holds them as "rrggbb". The programmers for the .Net Excel inter-op were not told and and did not reverse the Excel colour number before using it to control the screen.
I have mainly come up against formatting and date issues when opening text files which have been saved with different regional settings. Two useful cell properties for dealing with this are:
.Text returns the cell value as it is displayed
.Value2 returns the unformatted cell value or date serial number.
As you say, standard date and number formats depend on windows regional settings and this may not be desired behavior as the same workbook can display differently in different regions. MS introduced the regional code prefixes in number formats (circa Excel 2000?) which enforce consistent display if needed but they need to be explicitly selected.
If you really want to see a date or number as the user entered it, you could extract the contents of the .xlsx file looking at the worksheet cell format and the shared strings xml definitions which list the number formats in the saved workbook. I don't really see a need to do this though as the underlying value is stored internally as a serial number and this will not change.
BTW 1: It's been almost 30 years since I was in the military...
I worked on helicopters and I was taught to use a format such as this in the aircraft logbooks: 3 Apr 12. So, that's how I still write dates. This way, there's no wondering about 4/3/2012 - is it April 3 or March 4?
I hacked this: I rewrite the original data in a known format. it relies on DateSerial and TimeSerial:
'Google spreadsheet stores dates in USA format (MM/DD/YYYY). We're in Australia, using DD/MM/YYYY, so we need to swap them.
'
With dc 'the cell who contains a date in USA format.
d = .Value 'capture value in USA format
t = TimeValue(d)
.NumberFormat = "dd/mm/yyyy" 'set to OZ format, so Excel knows the values were swapped in its internal math.
.Value = DateSerial(Year(d), Month(d), Day(d)) 'DateSerial takes y,d,m. We swap Month and Day components, to get OZ format dates
.Value = .Value + TimeSerial(Hour(t), Minute(t), Second(t))
dc.Font.Bold = True ' We bold the cells that are swapped, for debugging
End With
End If

Resources