首先需要帮助从Excel数据集中删除星期六和星期日 目标。如果我能做到,也要擦掉假期。 Rapiminer是最受欢迎的方法。 这是我到目前为止所做的:可以将时间戳从UNIX转换为人,但无法想象如何擦除周六和周日。
答案 0 :(得分:1)
您将不得不提供从UNIX(也称为POSIX)时间戳到Excel日期格式的转换。通常,这是通过将时间戳除以86,400(一天中的秒数)和添加25,569(从1900年1月1日到1970年1月1日的天数)来执行的。 Excel识别出其真实日期后,NETWORKDAYS function或更新NETWORKDAYS.INTL function可用于在帮助列中提供过滤条件。使用辅助列允许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的实际保存和关闭,以便它保留在屏幕上。