我是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)”。不胜感激。
答案 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%,就越需要花费更多的时间,在您不知不觉中,您将花费一个月的时间,想知道发生了什么你的生活。