A股的交易日规定为凡是法定节假日和周末都不算交易日,其它日期都算交易日。
基于以上的知识,可以使用如下的代码获取2018年整年的沪深A股的所有交易日的日期:
Sub QQ1722187970()
Dim dStart As Date
Dim dEnd As Date
dStart = VBA.DateSerial(Year(Now()), 1, 1)
dEnd = VBA.DateSerial(Year(Now()), 12, 31)
Dim arr() As Date
dHoliday = Array(#1/1/2018#, #2/15/2018#, #2/16/2018#, #2/19/2018#, #2/20/2018#, #2/21/2018# _
, #4/5/2018#, #4/6/2018#, #4/30/2018#, #5/1/2018#, #6/18/2018#, #9/24/2018# _
, #10/1/2018#, #10/2/2018#, #10/3/2018#, #10/4/2018#, #10/5/2018#)
For i = dStart To dEnd
If UBound(VBA.Filter(dHoliday, i)) >= 0 Or Weekday(i, vbMonday) > 5 Then
Else
ReDim Preserve arr(k)
arr(k) = i
k = k + 1
End If
Next i
End Sub
以上代码将把所有交易日期存储在arr数组中。
如果想要做成一个函数的,可以使用如下的代码:
Function GetAllDate()
Dim dStart As Date
Dim dEnd As Date
dStart = VBA.DateSerial(Year(Now()), 1, 1)
dEnd = VBA.DateSerial(Year(Now()), 12, 31)
Dim oDicDate As Object
Set oDicDate = CreateObject("Scripting.Dictionary")
dHoliday = Array(#1/1/2018#, #2/15/2018#, #2/16/2018#, #2/19/2018#, #2/20/2018#, #2/21/2018# _
, #4/5/2018#, #4/6/2018#, #4/30/2018#, #5/1/2018#, #6/18/2018#, #9/24/2018# _
, #10/1/2018#, #10/2/2018#, #10/3/2018#, #10/4/2018#, #10/5/2018#)
For i = dStart To dEnd
If UBound(VBA.Filter(dHoliday, i)) >= 0 Or Weekday(i, vbMonday) > 5 Then
Else
oDicDate.Add i, k
End If
Next i
GetAllDate = oDicDate.keys
End Function
函数的返回值是所有交易日期的数组。


发表评论