我有一列日期(A列)以yyyy-mm-dd格式存储为文本,我正在尝试将其转换为日期,最终我可以对它们进行查找.
我在这里阅读了一些主题并尝试了一些建议,但我无法得到任何工作.一个人正在使用:
Columns("A").Select Selection.NumberFormat = "date"
这改变了单元格的格式,但实际上并没有改变仍然存储为文本的值的格式.
我的理解是我需要使用CDate()来将值的格式从文本更改为日期.我尝试过这样的事情:
Dim c As Range For Each c In ActiveSheet.UsedRange.columns("A").Cells c.Value = CDate(c.Value) Next c
这给了我一个类型不匹配的错误.我想知道这是不是因为我试图将日期值保存回非日期格式化的单元格中,所以我尝试将它与上面的.NumberFormat ="date"结合起来,这也没有用.
任何建议,将不胜感激.
除了其他选项,我确认使用
c.Value = CDate(c.Value)
工作(仅使用Excel 2010测试您的案例描述).至于你得到类型不匹配错误的原因,你可以检查(例如)这个.
这可能是一个区域问题.
您可以使用DateValue
将字符串转换为此实例中的日期
Dim c As Range For Each c In ActiveSheet.UsedRange.columns("A").Cells c.Value = DateValue(c.Value) Next c
它可以将yyyy-mm-dd
格式字符串直接转换为本机Excel日期值.
您可以使用工作表的数据►文本到列命令的VBA等效快速将类似日期的文本列转换为实际日期.
With ActiveSheet.UsedRange.Columns("A").Cells .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, FieldInfo:=Array(0, xlYMDFormat) .NumberFormat = "yyyy-mm-dd" 'change to any date-based number format you prefer the cells to display End With
批量操作通常比循环遍历单元格快得多,而VBA的Range.TextToColumns方法非常快.它还允许您自由设置MDY与DMY或YMD转换掩码,这些掩码会困扰许多文本导入,其中日期格式与系统的区域设置不匹配.有关可用日期格式的完整列表,请参阅TextFileColumnDataTypes属性.
警告:导入文本时要小心,某些日期尚未转换.具有模糊月和日整数的基于文本的日期可能已被错误地转换; 例如2015年11月7日可能被解释为2015年11月7日或2015年7月11日,具体取决于系统区域设置.在这种情况下,放弃导入并将文本带回数据►获取外部数据►从文本中,并在文本导入向导中指定正确的日期转换掩码.在VBA中,使用Workbooks.OpenText方法并指定xlColumnDataType.
也许:
Sub dateCNV() Dim N As Long, r As Range, s As String N = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To N Set r = Cells(i, "A") s = r.Text r.Clear r.Value = DateSerial(Left(s, 4), Mid(s, 6, 2), Right(s, 2)) Next i End Sub
这假设列A包含文本值,如2013-12-25,没有标题单元格.