我有一张excel表,其中一列与日期和日期混合在一起,已经复制到文本中(见下文)。
我没有设法将文本类型转换为Date类型,我需要通过VBA将其添加到我正在处理的某些自动化中。有没有办法做到这一点?
我注意到excel正在寻找像这样的格式03/09/2016 23:39:57并且它不喜欢3/21/16 11:07:22 PM,显然这是我的情况:)每一个看起来我运行得到(显然数据不匹配),在下面的图像中,语音列是" C"
thx:)
答案 0 :(得分:1)
Excel已根据您的Windows区域设置短日期格式解析日期。它无法解析的那些(月份> 12)作为文本留下的。由于文本文件中的日期格式与Windows区域设置中的日期格式之间最初存在差异,因此很可能许多日期(或未格式化的数字)的日期转换不正确。
您有几个选择:
Import
文本文件使用Get External Data
上的From Text
标签Data Ribbon
选项。这将打开文本导入向导,并允许您指定要导入的数据的日期格式。这些可能是两个最简单的选择。第一个可以通过VBA自动化。第二,不是那么多。
答案 1 :(得分:1)
假设错误的日期是MM / DD / YYYY,那么您可以使用我为您编写的以下代码:
Sub main()
Dim celda As Range
Dim s_date As String
Dim s_time As String
Dim validate_date As String
Dim valid_date As String
Dim date_arr() As String
Dim rango As Range
Dim limit As Long
limit = Columns("B").Find("", Cells(Rows.Count, "B")).Row - 1
Set rango = ActiveSheet.Range("B2:B" & limit)
' works only for date values, another value would return non expected values
For Each celda In rango
validate_date = Left(celda.Value, 1)
If validate_date <> "" Then
If Not celda.Rows.Hidden Then
If validate_date <> "0" Then
s_date = Trim(Mid(celda.Value, 1, InStr(1, celda.Value, " ") - 1))
s_time = Trim(Mid(celda.Value, InStr(1, celda.Value, " "), Len(celda.Value) - InStr(1, celda.Value, " ")))
date_arr = Split(s_date, "/")
valid_date = date_arr(1)
valid_date = valid_date & "/0" & date_arr(0)
valid_date = valid_date & "/" & date_arr(2)
valid_date = valid_date & " " & s_time
celda.Offset(0, 1).Value = CDate(valid_date)
End If
End If
End If
Next celda
End Sub
为了使用此代码,您应该从目标向右插入一个空列。其次,您应该选择整个C列并运行宏。
编辑1。好的,此宏自动选择列B.现在不需要选择列日期。