gpt4 book ai didi

vba - 与区域设置无关的文本到最新的转换函数

转载 作者:行者123 更新时间:2023-12-02 13:11:31 25 4
gpt4 key购买 nike

我正在尝试将类似于“MMM DD YYYY”(例如“Jan 17 2015”)的字符串转换为 Excel 序列日期。
问题是:我正在运行 Windows 的国际版本,并且 DATEVALUE 和 CDate() 都无法识别此格式(它们取决于系统区域设置)。此外,当我编写该函数时,我不知道它将在哪个区域设置上使用。
本帖:Excel VBA - Convert Text to Date?提供了一个很好的解决方案(以编程方式调用 TextToColumns),但它对我来说没有用 - 我需要一个函数(或 UDF)来处理公式内的字符串。这些“日期”是另一个计算的结果(实际上是正则表达式),所以我不能在这些单元格上使用 TextToColumns - 它会把它们弄乱。

是的,我可以编写一个带有静态查找表的 UDF,将数字输入 DateSerial(),但也许有更好的方法?

澄清这不是关于固定 d/m/y 的顺序。罪魁祸首是月份的文本名称 - 它是英文的,因此国际版 Excel 无法识别它。例如,二月在芬兰语中是“helmikuuta”,在波兰语中是“luty” :)

关于答案哇这么多有用的答案!到目前为止,我使用 SO 的(短期)经验相当负面 - 我提出一个问题,没有人说任何有建设性的话,最后我开发了一个解决方案并自己回答问题。然而,这一次,我感到惊喜,我对人性的信心又恢复了:)现在将查看答案并对其进行评论...

最佳答案

这是一个简单的 UDF,

Function repairDate(str As String)
Dim arr As Variant, mnths As Variant

mnths = Array("Jan", "Feb", "Mar", _
"Apr", "May", "Jun", _
"Jul", "Aug", "Sep", _
"Oct", "Nov", "Dec")
arr = Split(str, Chr(32))
repairDate = DateSerial(arr(2), _
Application.Match(arr(0), mnths, 0), _
arr(1))
End Function

这将返回序列日期。建议您使用以 * 开头的日期格式之一,因为它们是跨语言支持的。

enter image description here

关于vba - 与区域设置无关的文本到最新的转换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48684171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com