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

标签 excel vba

我的系统位于英国地区(Windows 7,Office Professional Plus 2013)。

我有一些日期列,以英国格式 (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

有很多方法可以通过循环遍历单元格来做到这一点,但我的目标是找到一个有效的解决方案,我可以在 future 以及这种情况下使用(我对优化有点强制症)。

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

最佳答案

对于日期,如果您的操作系统(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 来避免调用此函数。

关于excel - 将一列英国日期转换为 VBA 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310317/

相关文章:

excel - 使用 Excel 计算分子量

vba - 不使用 .Activate 循环遍历图表上的点

c# - 逐行、逐单元格读取 excel 文件 C#

vba - Excel 和 DB2 连接

excel - 将网站导入/抓取到 excel

excel - 使用 GrantAccessToMultipleFiles 阻止 Sub 在 Windows 上运行

vba - 一次调整 Excel 表格中的整行的宏

c# - 使用 ClosedXML 从 Excel 文件中读取

regex - 从单元格区域中删除非数字字符

vba - 代码没有执行。如果我使用颜色索引 = 3 或 2,它可以工作,但当我使用 RGB 时则不行