Excel日期格式

时间:2013-03-27 16:54:37

标签: excel date

我在一个列中有一个包含American Dates的大型导入csv文件。我想使用代码将这些日期更改为英国格式(dd/mm/yyyy)。问题是美国日期是"mm/dd/yyyy""m/dd/yyyy"格式 - 后者不响应excel中的任何“可点击”选项 - 包括“文本到列”过程。是否有代码在相邻列中运行时会进行转换?

5 个答案:

答案 0 :(得分:26)

您也可以非常轻松地使用TEXT()功能(注意:源数据必须是excel日期值)

TEXT(value, format_text)

其中value是参考单元格,format_text是您希望格式化文本的方式 - 在您的情况下为dd / mm / yyyy。

假设:

A1 = 3/17/2013
A2 = 12/27/2013

在B1& B2只需输入:

B1 = TEXT(A1, "dd/mm/yyyy")
B2 = TEXT(A2, "dd/mm/yyyy")

,结果应为

     A              B
3/17/2013      17/03/2013
12/27/2013     27/12/2013

希望有所帮助。

如果使用文字更新了建议:

使用mid()left()right()函数拆分字符串,然后使用LEN()函数检查月份mm是1还是2个字符。最后使用&和弦连接在一起。和/运营商。

尝试在B1中粘贴它,它应该可以正常工作:

=MID(A1,FIND("/",A1,1)+1,2)&"/"&IF(LEN(LEFT(A1,FIND("/",A1)-1))=1,0&LEFT(A1,FIND("/",A1)-1),LEFT(A1,FIND("/",A1)-1))&"/"&RIGHT(A1,4)

答案 1 :(得分:3)

您可以使用DATEVALUE函数将日期字符串转换为Excel数据值,然后创建自定义日期格式以英国格式显示日期值。

假设第一个日期字符串在单元格A1中,以下函数调用将字符串转换为日期值。

  =DATEVALUE(A1)

您可以通过右键单击单元格,选择格式单元格,数字,自定义并在类型字段中输入格式来创建自定义格式dd/mm/yyyy;@

使用日期值而不是日期字符串将允许您更改显示的格式,而无需执行字符串操作来重新排列日期元素。如果需要,它还可以进行日期算术。

答案 2 :(得分:2)

这是一个可能对你有帮助的子。使用QueryTables方法,您可以指定Excel将某些数据列解释为字符串。

Sub ImportExternalCSVAsText()
'
Dim sFileName As String
sFileName = Application.GetOpenFilename("CSV files, *.csv")

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & sFileName _
        , Destination:=Range("$A$1"))
        .Name = "CSV"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

在该示例中,我导入了3列宽的CSV文件,并指定第2列和第3列包含字符串类型数据。

.TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING

如果此方法不起作用,请告诉我。我之前不得不处理这个问题(作为英国合同工作的美国承包商),我很确定我当时使用了一些功能。

这将把所有值都作为字符串。

您很可能必须解析它们,因为美国日期输入(例如“12/30/2011”)将失败您系统区域设置上的DATEVALUE()功能,以及美国日期输入,例如“ 07/05/2012“(2012年7月5日)将被您的语言环境解释为”2012年5月7日“。

答案 3 :(得分:1)

这个功能可以解决问题:

=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))

答案 4 :(得分:1)

奇怪的是,为此,您需要将一列文本转换为一列文本。

选择包含日期的列:mm / dd / yyyy

  • 在“数据”下,选择“文本到列”
  • 选择固定宽度
  • 下一步
  • 在年份(yyyy)
  • 之后设置列宽分隔符
  • 以列数据格式
  • 下拉选择mm / dd / yyyy(源格式)
  • 选择目的地
  • 完成

源数据将转换为系统的日期格式。

Sub USUKDateFormat()

    ' USUKDateFormat Macro

    Selection.TextToColumns Destination:=ActiveCell.Offset(0, 2).Range("A1"), _
        DataType:=xlFixedWidth, OtherChar:="/", FieldInfo:=Array(Array(0, 4), Array _
        (10, 1)) 
End Sub