我有一个包含美国日期的大型导入 csv 文件。我想(dd/mm/yyyy)
使用代码将这些日期更改为英国格式。问题是美国日期"mm/dd/yyyy"
和"m/dd/yyyy"
格式-后者不响应excel中的任何“可点击”选项-包括“文本到列”程序。是否有代码在相邻列中运行时会进行转换?
5 回答
您也可以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)
您可以使用 DATEVALUE 函数将日期字符串转换为 Excel 数据值,然后创建自定义日期格式以以英国格式显示日期值。
假设第一个日期字符串在单元格 A1 中,以下函数调用会将字符串转换为日期值。
=DATEVALUE(A1)
您可以dd/mm/yyyy;@
通过右键单击单元格,选择“设置单元格格式”、“数字”、“自定义”并在“类型”字段中输入格式来创建自定义格式。
使用日期值而不是日期字符串将允许您更改显示的格式,而无需执行字符串操作来重新排列日期元素。如果需要,它还可以进行日期算术。
这是一个可以帮助你的子。使用 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 日”。
这个函数应该可以解决问题:
=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))
奇怪的是,要做到这一点,您需要将一列文本转换为一列文本。
选择包含您的日期的列: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