Formatting Dates (International and American in Same Column) - excel

I am struggling with formatting dates in Excel and am looking for some help.
I have two different date formats in the same column:
MM/DD/YYYY
DD/MM/YY
I am struggling to change the DD/MM/YY to MM/DD/YYYY. I have tried so many things and can't get it to work.
Public Function dateguesser(inDate As String) As Date
dateguesser = CDate(Split(Split(inDate, " ")(0), ",")(0))
End Function
Things I have tried:
This solution ends up thinking that the DD in the DD/MM/YY format is the year because the year is not stored as four digits.
Tried to change MM/DD/YYYY to DD/MM/YY and then convert all of them to MM/DD/YYYY.
Text to columns

If you put this formula starting in B3, I think it should work for all values?
=IF(ISNUMBER(A3),A3,DATE(2000+RIGHT(A3,2),MID(A3,4,2)+0,LEFT(A3,2)+0))
You could also probably modify your custom function to something like this:
Public Function dateguesser(inDate As Variant) As Date
If IsNumeric(inDate) Then
dateguesser = inDate
Else
dateguesser = CDate(Split(Split(inDate, " ")(0), ",")(0))
End If
End Function

I'd add another column to convert to epoch and back to new date format. https://exceljet.net/formula/convert-unix-time-stamp-to-excel-date could help
Assuming the input is in A10:A11, I made for B10:
=((A10-DATE(1970,1,1))*86400/86400)+DATE(1970,1,1)
and applied new date format to B:B.

Related

VBA to convert Excel cells "date like" values into the date format issue

I have a list of dates in the column. All the cells are date values in fact, but they are not in Excel date format and I cannot convert them into the dates. All the dates are modification of the system Long date format, but not the standard system Long date format. Actually they correspond to the following format template:
"[$-uk-UA-x-genlower]d mmmm yyyy" (or "[$-FC22]dd mmmm yyyy")
Such values look like this: “14 липня 2021”, but Excel doesn’t treat them like dates.
Conventional Excel VBA functions DateValue and CDate do not work (I receive “type mismatch” error).
At the same time they work fine with the values which correspond to this format template (standard system Long date format):
"d mmmm yyyy"
Such values look like this: “14 липень 2021”
I cannot convert my cell values into standard system Long date format.
If I do this:
Dim LstrDate As String
Dim LDate As Date
LstrDate = "14 липня 2021"
Debug.Print IsDate(LstrDate)
LDate = CDate(LstrDate)
I receive: False and Type mismatch error.
If I had this: LstrDate = "14 липень 2021"
I would receive True and success. But I do not want to modify hundreds of cells by hands.
The question is: is there any way to convert cell values which corresponds to "[$-uk-UA-x-genlower]d mmmm yyyy" template into Excel date format and treat them like dates?
I am looking for a function which can convert values in the cells into date-type format like CDate or for a way to make existing functions CDate or DateValue to work with this type of data.
P.S. This is not an issue of a language. It can be set in any other language with formatCode16 attribute.
.NumberFormat doesn’t change anything.
It’s also funny, but if I have date-type cell value, I can change its format using .NumberFormat as I want: from “dd.mm.yyyy” to "[$-uk-UA-x-genlower]d mmmm yyyy" and back and it works.

Excel vba - change format of date

I have a column with dates that are stored as d.m.yyyy. h:mm:ss.
And the cell format isn't even date it's general.
To use it as a date I need to replace that dot with "".
So I used this code:
Format(Date, "d.m.yyyy h:mm:ss")
But it changed all dates to todays date.
The call of Date returns the current date. You have to use the cell value instead, like Format(Cells(row,column), "d.m.yyyy h:mm:ss"), after you replaced the dot at the end of the year value.

How to convert d/m/yyyy h:mm:ss to yyyyMMdd in Excel

I want to convert d/m/yyyy or dd/m/yyyy or d/mm/yyyy to yyyyMMdd format in Excel. The original value looks like 3/3/2014 8:00:00 am.
If all dates would be same length I could do left, mid, and so on to reverse the date and truncate the time. But how can I do this when I have dates with three different lengths?
This works with fixed length: =DATE(MID(A1;7;4); LEFT(A1;2); MID(A1;4;2))
With data in A1, in B1 enter:
=TEXT(DATEVALUE(MID(A1,1,FIND(" ",A1)-1)),"yyyymmdd")
NOTE:
The month and day in the input must be in the correct order for the DATEVALUE() function.
For data like:
25/12/2014 8:00:00 am
I would use the following UDF
Public Function INeedADate(s As String) As Date
ary = Split(Trim(s), " ")
bry = Split(Trim(ary(0)), "/")
INeedADate = DateSerial(bry(2), bry(1), bry(0))
End Function
In this case the cell B1 must be formatted Custom > "yyyymmdd"

Excel 2010 - change US dates to UK format

I have imported a CSV file with 2 long columns of dates. These dates are in the US format Aug/28/2013 and I want them to be in the standard UK dd/mm/yyyy format.
I have tried formatting the cells as US dates and then converting them to number-only formats, and various other permutations within the Date format box, but with no success.
Can anyone rid me of these awful US dates please?
Another solution without using a formula:
Select the relevant columns
Choose Data → Text to Columns…
Select “Delimited” and click Next
Untick all delimiters and click Next
Select data column format “Date: MDY” and click Finish
The dates should now be converted to UK dates.
The problem is that a US date can parsed by Excel as a UK date when the day is less than 13. When this happens Excel converts it to the localized UK serial (date) number.
So 03/19/2014 is obviously a US date of the 19th of March. However 05/03/2014 is ambiguous so Excel parses it the local date format as the 5th of March, rather than the US 3rd of May. Any formula has to check if Excel has stored the US Date as a UK date. A UK date will be stored in Excel as a number.
=IF(ISNUMBER(A2),DATE(TEXT(A2,"yyyy"),TEXT(A2,"dd"),TEXT(A2,"mm")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2)))
(For a US date in cell A2 and PC date is dd/mm/yy).
If ISNUMBER is true, the US date looks like a UK date and Excel has serialized it as a number. So can format the date as text and back to a date again. Note day is passed to the month parameter of the first DATE function to perform the conversion.
If ISNUMBER is false, its stored as a string as Excel doesn't convert a date string with >12 months. So use string functions to split it up for the DATE function.
I'm assuming that the date you received is formatted as text and that simply formatting it as date is not changing anything. You can run the following formula on the date:
=(MID(A1,FIND("/",A1)+1,FIND("/",A1,FIND("/",A1)+1)-FIND("/",A1)-1)&"-"&LEFT(A1,FIND("/",A1)-1)&"-"&RIGHT(A1,4))*1
If you get numbers, you just need to format it as dd/mm/yyyy and it should be good.
I tried some of the other suggestions but none seemed to work for me. In my case I was importing US dates in the form M/d/yyyy hh:mm:ss. If you don't mind using some VBA in your spreadsheet then the following function did the job for me:
Public Function USDate(ds As Variant) As Variant
Dim sp() As String
Dim spt() As String
Dim spt2() As String
If ds = vbNullString Then
USDate = ""
ElseIf IsNumeric(ds) Then
' Convert numeric US dates wrongly interpreted as UK i.e. 1/7/2017 as 7th January 2017
USDate = DateSerial(Year(ds), Day(ds), Month(ds))
Else
sp = Split(ds, "/") ' split the date portion
spt = Split(sp(2), " ") ' split the time from the year
spt2 = Split(spt(1), ":") 'split the time hms
USDate = DateSerial(spt(0), sp(0), sp(1)) + TimeSerial(spt2(0), spt2(1), spt2(2))
End If
End Function
Thanks for https://stackoverflow.com/users/845584/peterx pointing out - you will need to create the function in a VBA code module to use this technique.
Simply use it in a spreadsheet formulae for example =USDate(A2)
Related to this, the below simply formula can be helpful for changing a date from
"MM/DD/YYYY"
into
"DD/MM/YYYY".
=VALUE(TEXT(B2,"mm/dd/yyyy"))
We can get best of both world with this more concise formula:
=IF(ISNUMBER(A2),VALUE(TEXT(A2,"mm/dd/yyyy")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2)))
Can't find anything shorter.
There was one more issue for me, as somehow the raw data was supposed to be read as a number, but it did not. Hence, i updated the formula with 1 final case:
=IFERROR(IF(ISNUMBER(A2),VALUE(TEXT(A2,"mm/dd/yyyy")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2))),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,1)))
This can be tricky when the dates in mixed format eg. UK and US in the same column. I have found an effective if inelegant solution:
Step1) Select the column containing the dates to be converted;
Step2) Format, Cells, Text;
Step3) Format, Cells, Date, US;
Step4) Data, Text to column, Next, Delimited, Next, delete all delimiters, Next, select format MDY;
Step5) Format, Cells, Date, UK.
Step4 had been suggested elsewhere, but that on it's own didn't do it for me. I am hoping to combine these steps into a macro but no success this far.
I couldn't get the most common answer to work, the process that worked for me was:
For date 10/04/2018 11:49:20, right-click cell and "Format Cells", "Number" tab and select "Custom" Category and then select mm/dd/yyyy hh:mm.
Assuming that you start with a string (and not an internal excel date number that is just formatted as US format - which is an easy fix), can someone tell me why this method doesn't work?
Use the DATEVALUE / TIMEVALUE functions to convert it into an excel internal formatted date number (You might need to MID() the string in case there are extra bits before or after).
Just make sure that your regional settings match the input date format (otherwise DATEVALUE will fail and you will get a #VALUE error).
Then set the cell format to display the way you want it (Custom format e.g. "dd/mm/yyyy hh:mm:ss").
If you also want to change the timezone, you can add on (hours/24) to the internal Excel excel formatted date number.
The above look impressively complex! Why any country should settle on a non-sequential date format escapes me! Say you have a US-format date (mm/dd/yy) in cell A1. To convert this to dd/mm/yy format as in the UK, just do:
=CONCATENATE(MID(A1,4,2),"/",MID(A1,1,2),"/",MID(A1,7,2))
This certainly works in LibreOffice and I hope also in Excel.

In excel, I have a cell that in dd/mm/yyyy hh:mm format, i want to extract date as a string

I have a cell that has date time in the following format. dd/mm/yyyy hh:mm. Now i need to extract the date out of it as a string and append to it a different time. And i need the final result as a string. Whats the best way to do this.?
If your date/time was in A1, your second time in A2 then
in A3
=TEXT(A1,"dd-mm-yyyy")&" " &TEXT(A2,"hh:mm")
If the result is requirde in VBA:
strFormatYouWant = "yyyymmdd" 'or any valid date format
strDt = format(range("a2"), strFormatYouWant)
Otherwise, see #brettdj's reply

Resources