【发布时间】:2013-04-01 20:03:00
【问题描述】:
我遇到了一项具有挑战性的任务,我无法使用许多解决方法来解决。
在一列中我有日期,日期可以是以下三种格式:
1) 简单的 dd/mm/yy
2) dd/mm/yy 但周围可能有“之前、之后或大约”字样。任何 其中之一,我们只需要在这种情况下删除这些单词。
3) 数字格式的日期。长十进制值,如 1382923.2323 但实际上我可以在转换后从中得到一个日期。
文件已上传至此处。 Date_format_macro_link
我编写了以下代码,但结果错误。
Sub FormatDates_Mine()
ManualSheet.Activate
ManualSheet.Cells.Hyperlinks.Delete
ManualSheet.Cells.Interior.ColorIndex = xlNone
ManualSheet.Cells.Font.Color = RGB(0, 0, 0)
lastRow = ManualSheet.Range("A" & Rows.Count).End(xlUp).Row
Col = "A"
For i = 2 To lastRow
Cells(i, Col) = Trim(Replace(Cells(i, Col), vbLf, "", 1, , vbTextCompare))
If InStr(1, Cells(i, Col), "about", vbTextCompare) <> 0 Then
Cells(i, Col) = Trim(Replace(Cells(i, Col), "about", "", 1, , vbTextCompare))
Cells(i, Col).Interior.Color = RGB(217, 151, 149)
End If
If InStr(1, Cells(i, Col), "after", vbTextCompare) <> 0 Then
Cells(i, Col) = Trim(Replace(Cells(i, Col), "after", "", 1, , vbTextCompare))
Cells(i, Col).Interior.Color = RGB(228, 109, 10)
End If
If InStr(1, Cells(i, Col), "before", vbTextCompare) <> 0 Then
Cells(i, Col) = Trim(Replace(Cells(i, Col), "before", "", 1, , vbTextCompare))
Cells(i, Col).Interior.Color = RGB(228, 109, 10)
End If
DateParts = Split(Cells(i, Col), "/", , vbTextCompare)
Cells(i, Col) = Format(Cells(i, Col), "dd/mm/yyyy")
Next i
Range("D:E").HorizontalAlignment = xlCenter
End Sub
文件已上传至此处。 Date_format_macro_link
请帮忙!
【问题讨论】:
-
您已经提到了您的数据的外观,但您没有提到您想用它做什么。例如
About 21/05/09会发生什么?从您的代码中,您似乎想删除所有不需要的字符并将其转换为日期? -
您的数据中有一些值不符合
data type标准。要省略该问题,您可以在设置.Format属性之前使用类似If IsDate(Cells(i, Col)) Then的内容。对于其他问题,请参阅@SiddharthRout 评论... -
我认为你可以只用一个工作表公式来做到这一点......并使用条件格式设置颜色
标签: date excel date-formatting vba