Excel VBA PasteSpecial 添加不一致

Excel VBA PasteSpecial Add is Inconsistent

我有一个工作簿 (.xls),它是从一个专有软件生成的,其中包含 Excel 只能识别为字符串的日期 (dd/mm/yy hh:mm:ss)。

大约有 18000 行和 10 列。我可以 Excel 通过复制空白单元格、选择相关范围然后执行 PasteSpecial -Values -Add 来手动转换它们。或者,我可以在每一列上使用“文本到列”来触发更改为正确的 Excel 日期格式。

我想通过 VBA 子例程(下面的示例代码)执行此操作。

    Range("E1").Select 'blank cell
    Selection.Copy
    Range("A8").Select 'top left of range
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 'to bottom right
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd

但是,这似乎只影响了大约 35% 的选定单元格。 有趣的是,当我尝试使用替代 VBA 代码逐列执行“文本到列”时也是如此。

我被卡住了:你知道为什么会这样吗,还有其他选择吗?

csv 文件中的日期格式很奇怪。将数据转换为文本后,一些日期比其他日期长一个字符,我找不到它是哪个字符。肯定是非打印字符!

此过程基于您发布的文件。该过程从 D 列循环到 H 列,更正日期时间值,然后将它们作为值复制到原始列。

在测试之后添加您可能拥有的其他日期时间列,如果这对您来说没问题。

Sub FormatCSVDates()
    Dim tmpRng As Range
    Dim tmpCol As Integer: tmpCol = Range("AA8").Column
    
    Dim srcRng As Range
    Dim startCol As Integer: startCol = 4   ' column D
    Dim endCol As Integer: endCol = 8       ' column H
    Dim col As Integer


    For col = startCol To endCol
        ' clear helper column
        Range("AA8").CurrentRegion.ClearContents
    
        ' column range to format(source range)
        Set srcRng = Range(Cells(8, col), Cells(8, col).End(xlDown))
                
        ' temporary range
        Set tmpRng = srcRng.Offset(0, tmpCol - col)
        
        ' Insert formula in temporary range
        tmpRng.FormulaR1C1 = "=SUM(DATEVALUE(RC[-" & tmpCol - col & "]),TIMEVALUE(RC[-" & tmpCol - col & "]))"
        
        ' copy formula to values
        tmpRng.Copy
        tmpRng.PasteSpecial (xlPasteValues)
    
        ' copy from temporary range to source range
        tmpRng.Copy srcRng
        
        ' format sorce range
        srcRng.NumberFormat = "dd/mm/yy hh:mm:ss"
    Next col
    
    Application.CutCopyMode = False

    ' clear helper column
    Range("AA8").CurrentRegion.ClearContents
End Sub