Excel:在列中获取/过滤无效日期

时间:2016-05-24 05:14:34

标签: excel

需要在" General"中重新导入无效日期。

以下只是超过一百万行的一部分。与" General"中的有效日期格式和数字日期混合数据类型。

Excel只应过滤数据类型"一般"在一列中。可以一个接一个地做,但如前所述,记录或多或少在1米内。

3/25/64
4/7/59
22231
22653
19636
16257
1/1/63
8/28/49

我已经通过在单独的表中导入然后使用sql验证日期来解决这个问题。只是想通过excel知道如何做到这一点。

更新(布伦特黑客'样本):

我试图修改布伦特的例子。但它复制了整个excel。

脚本 Public Sub CopyRows() Dim icol As Integer Dim irow As Integer icol = 0 While ActiveSheet.Range("N1").Offset(0, icol) <> "" irow = 0 While ActiveSheet.Range("N1").Offset(irow, icol) <> "" If Selection.NumberFormat = "General" Then Worksheets("Sheet1").Range("A1:AB1").Offset(irow, icol).Copy _ Destination:=Worksheets("Sheet2").Range("A1").Offset(irow, icol) irow = irow + 1 End If Wend icol = icol + 1 Wend End Sub

1 个答案:

答案 0 :(得分:1)

不是很多。

你能用这样的东西吗?

Dim icol As Integer
Dim irow As Integer
icol = 0
While ActiveSheet.Range("A1").Offset(0, icol) <> ""
    irow = 0
    While ActiveSheet.Range("A1").Offset(irow, icol) <> ""
        If Selection.NumberFormat = "General" Then ActiveSheet.Range("A1").Offset(0, icol).EntireColumn.NumberFormat = "mm/dd/yy"
        irow = irow + 1
    Wend
    icol = icol + 1
Wend

好的 - 在您对问题进行编辑后,我想出了这个

Public Sub moveBadDatesToNewSheet()
    Dim icol As Integer
    Dim irowSrc As Integer
    Dim irowTgt As Integer
    Dim srcWS As Worksheet

    Set srcWS = ActiveSheet
    icol = 0
    Sheets.Add
    Set tgtWS = ActiveSheet
    While srcWS.Range("A1").Offset(0, icol) <> ""
        irowSrc = 0
        irowTgt = 0
        While srcWS.Range("A1").Offset(irowSrc, icol) <> ""
            If InStr(1, srcWS.Range("A1").Offset(irowSrc, icol), "/") = 0 Then
                tgtWS.Range("A1").Offset(irowTgt, icol) = srcWS.Range("A1").Offset(irowSrc, icol)
                irowTgt = irowTgt + 1
            End If
            irowSrc = irowSrc + 1
        Wend
        icol = icol + 1
    Wend
End Sub

这将采用每个非格式化日期并将其放入新工作表中。这是你要的吗?