VBA文本到列读取date格式为美国

在vba中运行text-to-columns时,只要有可能,我会将date显示为美国date,而不是英文date。 例如,8月31日为8月31日,9月1日为09年1月9日。

有没有什么方法可以指定所有的date是英国格式BEFORE VBA运行? 因为即使只是重新格式化为美国date显示为美国date将不会工作,因为我们有代码运行, if date < Today ,这当然会导致更改date格式的问题。

数据以dd / mm / yyyy格式input,但excel会以mm / dd / yyyy格式input!

也许你可以先用Application.International设置语言?

[ http://msdn.microsoft.com/en-us/library/office/ff840213(v=office.15).aspx] [1 ]

pnuts评论是解决这个问题最简单的方法。

说明:

运行“录制macros”,select您的列并启动文本到列向导。

在文本到列向导的第三页上,在“列数据格式”下,“date”选项自动设置为“MDY”。 将其更改为“DMY”。

停止macros,你会发现这个代码

 Columns("A:A").Select Selection.TextToColumns Destination:=Range("A:A"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 4), TrailingMinusNumbers:=True 

=Array(1,4)的“4”是确定DMY格式的部分。

我有一个更好的select。 将文本列定义为文本:

 Columns("A:A").Select Selection.TextToColumns Destination:=Range("A:A"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 2), TrailingMinusNumbers:=True 

使用2格式创build一个文本字段,所以不会有格式化。

这种情况下有一个workarround。 在做TexttoColumn之前,先从文本中获取date部分。 这个date将在文本中。 使用Left,Mid和Right函数获取date,月份和年份,然后使用vba中的函数dateserial和这些参数。 现在你会得到2种types的date。 英文格式的文本格式的date,您可以在Excel中的单元格中存储。 其他的是英国格式, 如果date<今天的条件将被使用。 U现在可以使用文本到列,并忽略来自texttocolumns的date,并使用date作为文本。 例如下面提到的代码 – “31/08/2014 part1 part2”

 Sub t() Dim myarr() As String Dim cell As Range For Each cell In Selection ' selection contains cells which text you need to convert text to columns i = i + 1 myarr = Split(cell.Value, " ") mydate = Val(Left(myarr(0), 2)) mymonth = Val(Mid(myarr(0), InStr(1, myarr(0), "/") + 1, 2)) myyear = Val(Right(myarr(0), 4)) date_american = DateSerial(myyear, mymonth, mydate) date_uk = myarr(0) Next cell End Sub 

今天我遇到了同样的问题,我也在文本中使用了DMY,当手动执行时使用了列,但是在上面描述的VBA中,在可能的情况下总是会更改为美国数据格式。

通过在右侧插入一个新列并使用= TEXT(单元格,“DD / MM / YYYY”),然后复制并粘贴这些值,我可以解决这个问题(可能不适合您)。

之后,我删除了原来的列,我也保证这总是工作,不pipe行数是多less,每次都用数据计算出最后一行。

VBA段下面..

 Sub Dateformat() 'sets i as last current row with data in Dim i As Integer Range("A2").Select i = ActiveCell.End(xlDown).Row Columns("D:D").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("D2").Select ActiveCell.FormulaR1C1 = "=TEXT(RC[-1],""DD/MM/YYYY"")" Selection.Copy Range("D2:D" & i).Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("C:C").Select Selection.Delete Shift:=xlToLeft End Sub 

希望这可以帮助。

谢谢

汤姆