Excel-VBA:从字符串中查找和替换日期格式

时间:2013-11-04 16:59:50

标签: excel vba excel-vba replace find

    ' Try to format the dates
    Range("N:N").Select
    Selection.NumberFormat = "dd/MM/yyyy"
    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

使用此代码尝试修复一些我无法控制的下载数据的问题。表在作为文本存储的日期前面有一个空格。例如“04/11/2013”​​

在Excel中执行手动查找和替换修复了问题,但我希望在之后透视数据和组,当我尝试使用VBA时,它会执行两项操作...

  1. 它无法将所有记录识别为日期。即使Cell格式发生了变化,有些仍然是General。这意味着用户必须通过F2 + Enter遍历每一行,然后使用数据透视表进行大量处理。

  2. 逆转日/月。即原始数据是2013年10月1日(10月1日),并将其转换为Janauary 10日。

  3. 是否修复了查找/替换或循环修复单元格格式的方法。

3 个答案:

答案 0 :(得分:1)

对于无VBA解决方案,您可以在此实例中尝试DATEVALUE函数。

DateValue

用法类似于

 =DATEVALUE(Trim(A1))

 =DATEVALUE(RIGHT(A1, LEN(A1)-1)

假设您的日期在单元格A1中


对于VBA解决方案,例如

Public Sub ConvertToDate()

Dim endRow As Long
Dim ws As Worksheet
Dim dateColumn As Long
Dim dateval As String
Set ws = Sheet1

'set date column (in this case we set column A)
dateColumn = 1

endRow = ws.Cells(ws.Rows.Count, dateColumn).End(xlUp).Row

For i = 2 To endRow

Dim length As Long

length = Len(ws.Cells(i, dateColumn)) - 1

    'just a quick and dirty check to see if there is value data
    'it isn't set to check for numeric data, so if there is some dodgy
    'string data in the cell then it will fail on the CDate line.
    If length > 3 Then

        'store date string (may use Trim() or Mid() etc...)
        dateval = Right(ws.Cells(i, dateColumn).Value, length)

        'convert to date and change cell value
        ws.Cells(i, dateColumn).Value = CDate(dateval)

    End If


Next i




End Sub

答案 1 :(得分:1)

确保将Windows区域设置设置为dd / mm / yy。

找到/替换

如果您需要其他处理,请在日期列上运行文本到列。

答案 2 :(得分:0)

我花了大约两个小时在谷歌搜索这个问题的答案,即使我将我的Windows区域设置设置为dd / mm / yy也没有任何效果。我唯一能将日期转换为正斜杠dd / mm / yyyy格式的VBA函数是TextToColumns函数。

Range("N:N").TextToColumns Destination:=Range("N1"), DataType:=xlDelimited, _
        FieldInfo:=Array(1, xlDMYFormat)

我在此页面找到了答案 - https://social.msdn.microsoft.com/Forums/en-US/e3522eac-13b1-476c-8766-d70794131cc8/strange-date-conversion-while-using-vba-replace-function?forum=isvvba