VBA – 将混合行(数据types明智)转换为date

我有一个Excel工作表,其中一列与date和date混合在一起,作为文本复制到它(见下文)。

我没有设法将文本types转换为datetypes,我需要做到这一点,虽然VBA添加到一些自动化即时通讯工作。 有没有办法做到这一点?

我注意到excel正在寻找这样的格式03/09/2016 23:39:57它不喜欢2016年3月21日11时07分22秒,显然这是我的情况:)每一个看我跑我得到(显然是数据不匹配),在下图中的口语栏是“C”

谢谢 :)

ExcelSheet不良date格式

假设date不正确,那么你可以使用我为你写的以下代码: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 

为了使用此代码,您应该从目标向右插入一个空列。 其次,你应该select整个C列并运行macros。

编辑1.确定,这个macros自动select列B.select列date现在不是必要的。

Excel根据您的Windows区域设置短date格式parsingdate。 那些不能parsing的地方(月份> 12)作为文本离开。 由于文本文件中的date格式与Windows区域设置中的date格式之间最初存在差异,因此很可能很多date显示为date(或未格式化的数字)被错误地转换。

你有几个select:

  1. 使用Data Ribbon上的Get External Data选项卡From Text选项Import文本文件。 这将打开文本导入向导,并允许您指定正在导入的数据的date格式。
  2. 更改您的Windows区域设置短date格式以匹配在文本文件中。

这可能是两个最简单的select。 第一个可以通过VBA进行自动化。 第二,不是很多。