将英国日期列转换为VBA中的文本

时间:2016-10-28 17:30:40

标签: excel-vba vba excel

我的系统位于英国区域(Windows 7,office professional Plus 2013)。

我有一些日期列,以Uk格式(dd / mm / yyyy)存储为日期,我需要将它们转换为相同格式的文本。我遇到的问题是,似乎每个VBA函数默认在转换为文本时吐出美国格式日期。

我尝试过使用range.TextToColumns函数和示例代码如下(主要是基于宏录制器 - 奇怪的文本到列在Excel中工作正常,但记录的代码给出了美国日期......奇怪)

Sub ColumnToText(rngColumn As Range)
' ---------------------------------------------------------------------
'   Takes a column, coverts it to text
' ---------------------------------------------------------------------

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

End Sub

我有很多方法可以通过遍历单元格来实现这一点,但我的目标是提供一种有效的解决方案,我可以在将来使用以及这种情况下(我是一个关于优化的小OCD)。 / p>

理想情况下,我希望能够像在Excel中一样使用TextToColumns函数在VBA中工作,但我意识到这可能是不可能的。

2 个答案:

答案 0 :(得分:3)

对于日期,如果您的操作系统(Windows)是英语 - 美国,您可以使用r.Value = t

Set r = Range("a1:a9")
t = r.Value
r.NumberFormat = "@"
r.Value = t

否则,如果您不希望将日期转换为美国日期格式,则必须使用r.FormulaLocal = t

Set r = Range("a1:a9")
t = r.Value
r.NumberFormat = "@"
r.FormulaLocal = t

当数据从vba发送到单元格时,如果需要,则调用内部类型转换函数,即数据类型与numberformat属性不同。 此内部类型转换功能仅识别国际日期格式(yyyy / mm / dd)和美国日期格式(例如mm / dd / yyyy)

您可以使用cell.FormulaLocal = data代替cell.Value = data以避免调用此函数。

答案 1 :(得分:0)

这将立即完成整个专栏。

Sub foo()
[A:A].NumberFormat = "@"
[A:A] = [IF(A:A<>"", TEXT(A:A,"dd/mm/yyyy"),"")]
End Sub