17

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

4

5 回答 5

28

您也可以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()然后使用函数检查月份 mm 的长度是 1 个字符还是 2 个字符LEN()。最后使用 & 和 / 运算符将字符串连接在一起。

尝试将其粘贴到 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)

于 2013-03-27T17:28:22.850 回答
3

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

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

  =DATEVALUE(A1)

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

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

于 2013-03-27T17:17:54.270 回答
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 日”。

于 2013-03-27T17:36:13.777 回答
1

这个函数应该可以解决问题:

=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))
于 2013-03-27T17:00:01.353 回答
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 
于 2014-02-17T17:44:06.510 回答