VBA日期清除/重新格式化

时间:2018-08-22 17:34:13

标签: excel excel-vba office365

我是VBA编码的新手,想就如何进行数据清除/重新格式化获得一些想法。我从几乎没有业务逻辑/验证的系统中导出了excel数据。

因此,我有一个Date列,该列存在数据完整性问题,下面有一些示例。日期的格式不一致,日期与文本字符串结合在一起,在某些情况下,只有文本(在日期字段中)

以下是“日期”列中的数据示例:

2/2/2018
8/3/2018
1996
1990-1991
02/29/95
1992-93
05/08/200
DECLINED
5/1418
8/14/2018
06/09/200
1/12/94,  DECLINED CONTRACT  12/01/00
EXP CAT I
06/14/23018
1996
5-1-1207/07/92
8/3/2018
3-10-
1996
02/27/187
1-29-14
2/2/2018
1-4-11
3.8.99
2-17-12
10-6-16

我想将日期转换为MM/DD/YYYY格式。我意识到在我只有纯文本(例如'DECLINED')的地方,无法提取日期,但是我希望其他示例可以将日期格式化为上述格式。

有些日期显然不好(例如'5/1418'无法确定如何翻译),但我希望至少使用MM-DD-YYYY和MM.DD格式化的日期。 YYYY和类似的组合有一种方法可以转换其格式,以及我只有1位数字的Monday和Day(例如2/2/2018应该是02/02/2018)。如果只提供4位数的年份,我想转换为“ 01/01 /(year)”。不胜感激。

1 个答案:

答案 0 :(得分:1)

这是您可能需要花费一年时间尝试解决以得到100%解决方案的问题之一。好消息是,通过使用VBA CDATE()函数,您可以变得超级懒惰,并拥有60%的不错的解决方案,这可以很好地猜测您提供的内容。将Split()扔掉可以去除多余的单词和其他内容(可能在日期后加上空格或逗号),您可以在此处获得大部分的实际日期。剩余的记录要么是格式错误的日期,以至于您不得不为边缘情况编写代码,要么就是垃圾无日期的东西,您可以忽略。

在VBA中创建一个新模块,然后将其弹出:

Public Function dateguesser(inDate As String) As Date
    dateguesser = CDate(Split(Split(inDate, " ")(0), ",")(0))
End Function

然后,您可以在工作表中将此功能用作新功能

=dateguesser(A1)

然后抄下来。对于您的列表,您将获得以下信息:

+----+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|    |                   A                   |                                                                                                                                B                                                                                                                                |
+----+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|  1 | 2/2/2018                              | 2/2/2018                                                                                                                                                                                                                                                        |
|  2 | 8/3/2018                              | 8/3/2018                                                                                                                                                                                                                                                        |
|  3 | 1996                                  | 6/18/1905                                                                                                                                                                                                                                                       |
|  4 | 1990-1991                             | #VALUE!                                                                                                                                                                                                                                                         |
|  5 | 02/29/95                              | #VALUE!                                                                                                                                                                                                                                                         |
|  6 | 1992-93                               | #VALUE!                                                                                                                                                                                                                                                         |
|  7 | 05/08/200                             | ############################################################################################################################################################################################################################################################### |
|  8 | DECLINED                              | #VALUE!                                                                                                                                                                                                                                                         |
|  9 | 5/1418                                | ############################################################################################################################################################################################################################################################### |
| 10 | 8/14/2018                             | 8/14/2018                                                                                                                                                                                                                                                       |
| 11 | 06/09/200                             | ############################################################################################################################################################################################################################################################### |
| 12 | 1/12/94,  DECLINED CONTRACT  12/01/00 | 1/12/1994                                                                                                                                                                                                                                                       |
| 13 | EXP CAT I                             | #VALUE!                                                                                                                                                                                                                                                         |
| 14 | 06/14/23018                           | #VALUE!                                                                                                                                                                                                                                                         |
| 15 | 1996                                  | 6/18/1905                                                                                                                                                                                                                                                       |
| 16 | 5-1-1207/07/92                        | #VALUE!                                                                                                                                                                                                                                                         |
| 17 | 8/3/2018                              | 8/3/2018                                                                                                                                                                                                                                                        |
| 18 | 3-10-                                 | #VALUE!                                                                                                                                                                                                                                                         |
| 19 | 1996                                  | 6/18/1905                                                                                                                                                                                                                                                       |
| 20 | 02/27/187                             | ############################################################################################################################################################################################################################################################### |
| 21 | 1-29-14                               | 1/29/2014                                                                                                                                                                                                                                                       |
| 22 | 2/2/2018                              | 2/2/2018                                                                                                                                                                                                                                                        |
| 23 | 1-4-11                                | 1/4/2011                                                                                                                                                                                                                                                        |
| 24 | 3.8.99                                | #VALUE!                                                                                                                                                                                                                                                         |
| 25 | 2-17-12                               | 2/17/2012                                                                                                                                                                                                                                                       |
| 26 | 10-6-16                               | 10/6/2016                                                                                                                                                                                                                                                       |
+----+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

显然,这只是一个起点,但我认为这是一个很好的坚实起点。您可以开始在VBA中为其他案例编写剩余的废话,但您越接近100%,就越需要花费更多的时间,在您不知不觉中,您将花费一个月的时间,想知道发生了什么你的生活。