如何在excel中标准化数据格式

时间:2017-02-14 10:38:36

标签: excel vba excel-vba

我正在从许多工作簿中收集数据。问题是,在每个文档中日期格式不一致: 16/01/2015 2015年1月6日 的 2014年3月24日

我想要实现的是" YYYY-MM-DD"格式。在我的代码中,我有一个负责清除日期列的案例。现在我变得绝望了,我在代码中添加了大量的日期格式,但是对于虚线格式(上面带有粗体的格式)没有变化。即使我手动选择列并更改格式类型,或将值复制到.txt文件,然后复制回原始工作表,也尝试使用新的工作簿,但没有任何反应。为什么在这几个例子中无法更改日期值?任何帮助,将不胜感激。这是代码:

        Case 6:

    sourceWorkbook.Activate
    sourceWS.Activate

    sourceWS.Columns(i).Select
    Selection.NumberFormat = "YYYY-MM-DD;@"
    sourceWS.Range(Cells(2, i), Cells(lastrw, i)).NumberFormat = "YYYY-MM-DD;@"


        For j = startRow To lastrw Step 1
            'Assign the header to the first row
            NewWorksheet.Cells(1, i) = sourceWS.Cells(startRow, i).Value

            On Error Resume Next
                textToFormat = CStr(sourceWS.Cells(j, i).Value)

                d = CDate(textToFormat)
                finalDate = Format(textToFormat, "YYYY-MM-DD")

                NewWorksheet.Cells(j - adjustRows, i) = finalDate
                'This error handler purpose to handle the header name!
                If Err Then

                    NewWorksheet.Cells(j - adjustRows, i) = textToFormat

                End If

            On Error GoTo 0

        Next j
        Set fckFormat = NewWorksheet.Columns(i)
        fckFormat.NumberFormat = "YYYY-MM-DD;@"
        NewBook.Activate
        NewWorksheet.Activate
        NewWorksheet.Columns(i).Select
        Selection.NumberFormat = "YYYY-MM-DD;@"

1 个答案:

答案 0 :(得分:0)

正如乔丹建议的那样,问题是这些数据被格式化为字符串而不是日期。例如,如果我在新工作簿中输入上述每个日期,则前两个被正确检测为日期(并且可以格式化为这样),而最后一个被视为文本字符串。这可能会因您的区域设置而异。

不幸的是,CDate函数也无法将此格式识别为有效日期。尝试运行以下内容,您将收到类型不匹配错误:

Set datecol = Sheets(1).Columns(1) 
datecol.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

您可以使用替换方法将此转换为有效日期,方法是用斜线替换点:

            d = CDate(textToFormat)
            NewWorksheet.Cells(j - adjustRows, i) = d

单元格仍将被格式化为字符串,但您现在可以使用现有循环将其转换为使用CDate的日期:

create dm_document object SET title = 'TEST', SET subject = 'TRIAL', set object_name = 'Test123', SETFILE 'c:\test.txt' with CONTENT_FORMAT= 'msww'

NumberFormat将正常工作。

注意:我建议使用CDate而不是Format,以便日期仍然存储为值而不是文本。