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