将文本更改为特定日期格式+ Excel VBA

时间:2016-11-12 01:42:03

标签: excel-vba date format arabic right-to-left

我想将excel表格中保存为文本的日期更改为阿拉伯语(Hijri)日期格式,即; dd / mm / yyyy到(从右到左)yyyy / mm / dd ..可以手动完成从数字格式面板更改自定义格式(通过从列表中选择位置,日历类型和正确的格式)然后替换文本在单元格中具有相同的值...
我需要VBA代码来自动执行任何ltr日期的替换过程,并且对于现有的rtl日期,只需将格式从一般转换为日期。

另一个问题是,在单元格中的日期周围还有一些其他文本(dd / mm / yyyy ttt)。我希望代码删除此文本(ttt)(任何文本),然后更改为正确的格式

我找到了这段代码,但根据我的具体需要,它不起作用 Changing the date format to yyyy-mm-dd

我感谢任何帮助,提前谢谢..

1 个答案:

答案 0 :(得分:1)

您有许多不同的问题,期望其他人发布完整的解决方案或者有人为您编写完整的解决方案是不现实的。您需要将整个问题分解为其组件,并创建或寻找每个组件的解决方案。

您的字符串包含“dd / mm / yyyy”格式的CE日期。这些日期可以用文字包围。你给出了例子“dd / mm / yyyy ttt”。可以包含空格吗? “ttt”可以在约会之前到来吗?字符串可以像“aaaa bbbb cccc 12/11/2016 dddd eeee ffff”一样复杂吗?

无论情况如何,我都怀疑:

Dim Part() As String

Part = Split(.Cells(R, C).Value," ")

将是第一步的核心。用我复杂的例子,这将给出:

Part(0) = "aaaa"
Part(1) = "bbbb"
Part(2) = "cccc"
Part(3) = "12/11/2016"
  :   :   :   :

在每个单元格值的部分上循环,查找IsDate给出True的字符串,这样您就可以找到日期,以便.Cells(R, C).Value = Part(N)删除不需要的文字。

我会获取您的数据副本并尝试编写一个丢弃不需要的文本的宏。如果您可以成功创建该宏,则表明您已完成解决方案的第1步。如果你在使用这个宏时遇到问题,你可以在这里寻求帮助并期望得到它。

下一步是将字符串“dd / mm / yyyy”转换为Excel日期。 Excel将日期作为自19/1/19 CE以来的日期数。更换: .Cells(R, C).Value = Part(N) .Cells(R, C).Value = CDate(Part(N))应该做到这一点。但是,Excel有时会尝试将“dd / mm / yyyy”日期解释为“mm / dd / yyyy”。我想你会没事的,但要注意这种可能性。

您的最后一步是将日历从CE日历转换为Hijri日历。这不仅仅是格式问题。这两个日历有不同的年零和不同的月份长度。您所在的国家/地区可能有标准转换功能,但英国似乎没有此功能。有在线帮助,因此您应该能够找到将执行转换的功能。

您有许多不同的问题,期望其他人发布完整的解决方案或者有人为您编写完整的解决方案是不现实的。您需要将整个问题分解为其组件,并创建或寻找每个组件的解决方案。

您的字符串包含“dd / mm / yyyy”格式的CE日期。这些日期可以用文字包围。你给出了例子“dd / mm / yyyy ttt”。可以包含空格吗? “ttt”可以在约会之前到来吗?字符串可以像“aaaa bbbb cccc 12/11/2016 dddd eeee ffff”一样复杂吗?

无论情况如何,我都怀疑:

Dim Part() As String

Part = Split(.Cells(R, C).Value," ")

将是第一步的核心。用我复杂的例子,这将给出:

Part(0) = "aaaa"
Part(1) = "bbbb"
Part(2) = "cccc"
Part(3) = "12/11/2016"
  :   :   :   :

在每个单元格值的部分上循环,查找IsDate给出True的字符串,这样您就可以找到日期,以便.Cells(R, C).Value = Part(N)删除不需要的文字。

我会获取您的数据副本并尝试编写一个丢弃不需要的文本的宏。如果您可以成功创建该宏,则表明您已完成解决方案的第1步。如果你在使用这个宏时遇到问题,你可以在这里寻求帮助并期望得到它。

下一步是将字符串“dd / mm / yyyy”转换为Excel日期。 Excel将日期作为自19/1/19 CE以来的日期数。更换: .Cells(R, C).Value = Part(N) .Cells(R, C).Value = CDate(Part(N))应该做到这一点。但是,Excel有时会尝试将“dd / mm / yyyy”日期解释为“mm / dd / yyyy”。我想你会没事的,但要注意这种可能性。

您的最后一步是将日历从CE日历转换为Hijri日历。这不仅仅是格式问题。这两个日历有不同的年零和不同的月份长度。您所在的国家/地区可能有标准转换功能,但英国似乎没有此功能。有在线帮助,因此您应该能够找到将执行转换的功能。

您有许多不同的问题,期望其他人发布完整的解决方案或者有人为您编写完整的解决方案是不现实的。您需要将整个问题分解为其组件,并创建或寻找每个组件的解决方案。

您的字符串包含“dd / mm / yyyy”格式的CE日期。这些日期可以用文字包围。你给出了例子“dd / mm / yyyy ttt”。可以包含空格吗? “ttt”可以在约会之前到来吗?字符串可以像“aaaa bbbb cccc 12/11/2016 dddd eeee ffff”一样复杂吗?

无论情况如何,我都怀疑:

Dim Part() As String

Part = Split(.Cells(R, C).Value," ")

将是第一步的核心。用我复杂的例子,这将给出:

Part(0) = "aaaa"
Part(1) = "bbbb"
Part(2) = "cccc"
Part(3) = "12/11/2016"
  :   :   :   :

在每个单元格值的部分上循环,查找IsDate给出True的字符串,这样您就可以找到日期,以便.Cells(R, C).Value = Part(N)删除不需要的文字。

我会获取您的数据副本并尝试编写一个丢弃不需要的文本的宏。如果您可以成功创建该宏,则表明您已完成解决方案的第1步。如果你在使用这个宏时遇到问题,你可以在这里寻求帮助并期望得到它。

下一步是将字符串“dd / mm / yyyy”转换为Excel日期。 Excel将日期作为自19/1/19 CE以来的日期数。更换: .Cells(R, C).Value = Part(N) .Cells(R, C).Value = CDate(Part(N))应该做到这一点。但是,Excel有时会尝试将“dd / mm / yyyy”日期解释为“mm / dd / yyyy”。我想你会没事的,但要注意这种可能性。

您的最后一步是将日历从CE日历转换为Hijri日历。这不仅仅是格式问题。这两个日历有不同的年零和不同的月份长度。您所在的国家/地区可能有标准转换功能,但英国似乎没有此功能。有在线帮助,所以你应该能够找到一个将执行转换的功能。