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