从数据集中过滤星期六和星期日

时间:2015-09-26 19:25:32

标签: excel

首先需要帮助从Excel数据集中删除星期六和星期日 目标。如果我能做到,也要擦掉假期。 Rapiminer是最受欢迎的方法。 这是我到目前为止所做的:可以将时间戳从UNIX转换为人,但无法想象如何擦除周六和周日。

1 个答案:

答案 0 :(得分:1)

您将不得不提供从UNIX(也称为POSIX)时间戳到Excel日期格式的转换。通常,这是通过将时间戳除以86,400(一天中的秒数)和添加25,569(从1900年1月1日到1970年1月1日的天数)来执行的。 Excel识别出其真实日期后,NETWORKDAYS function或更新NETWORKDAYS.INTL function可用于在帮助列中提供过滤条件。使用辅助列允许POSIX时间戳在过滤结果时保持不变,并且补充假期列表是一件小事。

NETWORKDAYS from POSIX

d @的'helper'列中使用的公式是

=NETWORKDAYS(A2/86400+25569, A2/86400+25569, $AA$2:$AA$11)

这会在周末和假日返回 0 ,在工作日返回 1

打开CSV,填充假日和帮助列,然后删除所有不需要的文件并关闭文件的整个过程。可以用一些VBA实现。

Sub import_UNIX_Timestamps()
    Dim fp As String, fn As String
    Dim rHOLIDAYs As Range, vHOLIDAYs As Variant, wb As Workbook

    Application.ScreenUpdating = False

    fp = Environ("TEMP")
    fn = "long to short ratios.csv"
    vHOLIDAYs = Array(DateSerial(2015, 1, 1), DateSerial(2015, 1, 19), _
                      DateSerial(2015, 2, 16), DateSerial(2015, 5, 25), _
                      DateSerial(2015, 4, 4), DateSerial(2015, 9, 7), _
                      DateSerial(2015, 10, 12), DateSerial(2015, 11, 11), _
                      DateSerial(2015, 11, 26), DateSerial(2015, 12, 25))

    Set wb = Workbooks.Open(fp & Chr(92) & fn)

    With wb
        With .Worksheets(1)
            .Cells(2, 27).Resize(UBound(vHOLIDAYs) + 1, 1) = Application.Transpose(vHOLIDAYs)
            Set rHOLIDAYs = .Range("AA2:AA" & .Cells(Rows.Count, 27).End(xlUp).Row)
            With .Cells(1, 1).CurrentRegion
                .Columns(1).ColumnWidth = 16
                .Columns(1).NumberFormat = "0"
                With .Resize(.Rows.Count, .Columns.Count + 1)
                    With .Resize(.Rows.Count - 1, 1).Offset(1, .Columns.Count - 1)
                        .Formula = "=NETWORKDAYS(A2/86400+25569, A2/86400+25569, " & rHOLIDAYs.Address & ")"
                        .Value = .Value
                    End With
                    .AutoFilter field:=4, Criteria1:=0
                    With .Resize(.Rows.Count - 1, 1).Offset(1, .Columns.Count - 1)
                        If CBool(Application.Subtotal(103, .Cells)) Then _
                            .EntireRow.Delete
                    End With
                    .AutoFilter field:=4
                    .Cells(1, .Columns.Count).Resize(1, 27).EntireColumn.Delete
                End With
            End With
        End With
        Application.DisplayAlerts = False
        '.Close savechanges:=True
    End With

    Application.ScreenUpdating = True

End Sub

我已经注释掉CSV的实际保存和关闭,以便它保留在屏幕上。