Excel自定义函数查找日期代码

时间:2018-04-03 13:08:38

标签: excel vba collections number-formatting

我编写了一个函数来查找静态集合中的序列日期代码。以下是该功能的小片段。

Function Dcode(IntNum as Integer)

set dict = New Scripting.Dictionary

dict.Add 101, 40544
dict.Add 102, 40575
dict.Add 103, 40603
dict.Add 104, 40634
dict.Add 105, 40664

Dcode = FormatDateTime(dict(IntNum),vbShortDate)

End Function

代码有效,例如,如果101在单元格A1中,则在B1中输入以下公式:

=Dcode(A1)

结果是2011年1月1日,这是正确的。但是,单元格编号格式为“常规”,如果您尝试按日期过滤,则不能,因为每个日期都是单独列出而不是按年,月,日列出。在函数结束之前,任何人都可以帮助更改单元格格式吗?

我尝试在函数的开头添加:

Selection.NumberFormat = "m/dd/yyyy"

这没用,实际上似乎无能为力。另外要添加一些说明,我希望在完成时创建一个全局函数,所以希望这可以在不保存为.xlsm文件的情况下完成

2 个答案:

答案 0 :(得分:1)

要扩展我的评论,您可以这样做:

Function Dcode(IntNum As Integer) As Date

Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

dict.Add 101, 40544
dict.Add 102, 40575
dict.Add 103, 40603
dict.Add 104, 40634
dict.Add 105, 40664

Dcode = CDate(dict(IntNum))

End Function

答案 1 :(得分:0)

我不知道您可以在函数中添加一些代码并格式化调用单元格

虽然您可以将以下内容放在工作表代码窗格

Private Sub Worksheet_Change(ByVal Target As Range)
    If InStr(Target.Formula, "=DCode") > 0 Then Target.NumberFormat = "m/dd/yyyy"
End Sub