Exceldate格式
我有一个大的导入CSV文件包含美国date列。 我想使用代码将这些date更改为英国格式(dd/mm/yyyy)
。 问题是美国的date是"mm/dd/yyyy"
和"m/dd/yyyy"
格式,后者对excel中的任何“可点击”选项都没有反应,包括“Text to Columns “程序。 有没有一个代码,当在相邻列运行将做转换?
您也可以很容易地使用TEXT()
函数(注意:源数据必须是exceldate值)
TEXT(value, format_text)
其中value
是参考单元格, format_text
是您想要格式化文本的格式 – 在您的情况下是dd / mm / yyyy。
假设:
A1 = 3/17/2013 A2 = 12/27/2013
在B1和B2中input:
B1 = TEXT(A1, "dd/mm/yyyy") B2 = TEXT(A2, "dd/mm/yyyy")
结果应该是
AB 3/17/2013 17/03/2013 12/27/2013 27/12/2013
希望有所帮助。
更新的build议,如果使用文本:
使用mid()
, left()
和right()
函数分割string,然后使用LEN()
函数检查month mm是1或2个字符长。 最后使用&和/运算符将string连接在一起。
尝试粘贴在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函数将datestring转换为Excel数据值,然后创build自定义date格式以UK格式显示date值。
假定第一个datestring在单元格A1中,下面的函数调用将把string转换为date值。
=DATEVALUE(A1)
您可以创build自定义格式dd/mm/yyyy;@
通过右键单击单元格,select格式单元格,数字,自定义并在types字段中input格式。
使用date值而不是datestring将允许您更改显示的格式,而无需执行string操作来重新排列date元素。 如果需要的话,它也可以做date算术。
这是一个可以帮助你的子。 使用QueryTables方法,您可以指定Excel将某些数据列解释为string。
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列包含stringtypes数据。
.TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING
如果这种方法不起作用,请告诉我。 之前我必须处理这个问题(作为英国合同工的美国承包商),而且我很确定当时有几个function在使用。
这将以string的forms将所有的值。
您很可能必须parsing它们,因为美国dateinput(如“12/30/2011”)将会失败系统区域设置上的DATEVALUE()
函数以及“2012年5月7日”(2012年7月5日)将被您的语言环境解释为“2012年5月7日”。
这个函数应该可以做到这一点:
=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))
奇怪的是,要做到这一点,你需要将一列文字转换为一列文字。
select包含date的列:mm / dd / yyyy
- 在数据下,select文本到列
- select固定宽度
- 下一个
- 年(yyyy)后设置列宽分隔符
- 列数据格式
- 下拉selectmm / dd / yyyy(源格式)
- select目的地
- 完
源数据将转换为您系统的date格式。
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