简体   繁体   中英

Convert text to date format to yyyy/mm/dd

When a report is exported from our system, dates are shown as 'yyyy / month name'.

I tried changing them to date format by creating a custom one on Excel > Home tab. Only when I click on one column and convert it to text, will it change to date format, from general "2015 March" to date 2015/03/01.

Custom Format not working
在此处输入图片说明

I am now trying to run a macro to convert all columns that contains these month/year dates to text, as I found no way else to fix the 1004 message.

Sub Text_to_columns()
'
' Text_to_columns Macro
'

'
Range("H2").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Replace What:=" / ", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
        

Dim col As Range
Dim i As Integer
For i = 8 To 300
    
    Selection.TextToColumns Destination:=Cells(2, i), DataType:=xlDelimited, _
      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
      Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
      :=Array(1, 5), TrailingMinusNumbers:=True

Next i

End Sub

It shows

1004 error
Microsoft can only convert one column at a time

How can I fix this? Is there another method to convert those text to dates?

Your question is not clear, but I think you want to change the text values in those cells to a date format, formatted in some defined fashion.

I suggest something like (and you'll have to change some of the constants to suit your specifics):

Option Explicit
Sub convToDate()
    Const firstCol As Long = 8
    Dim lastCol As Long
    Const myRow As Long = 2
    Dim WS As Worksheet
    Dim I As Long, x As Variant
    
'Set worksheet variable
Set WS = ThisWorkbook.Worksheets("sheet1")

'Find the last column
With WS
    lastCol = .Cells(myRow, .Columns.Count).End(xlToLeft).Column

'convert contents to date
    For I = firstCol To lastCol
        x = .Cells(myRow, I)
        If IsDate(x) Then .Cells(myRow, I) = CDate(x)
    Next I
    '.Range(.Cells(myrow,firstcol),.Cells(myrow,lastcol)).NumberFormat = "whatever format you want"
    'If you really want to convert these to text, use the VBA Format function

End With

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM