【发布时间】:2018-03-31 03:07:36
【问题描述】:
我有与其他 2 个用户定义函数相关联的用户定义函数,当我更新单元格时,它可能需要几分钟 (5-10),因为该文件有多达 400k 个单元格,并且它正在运行另外 2 个自定义函数来创建我们在工作中使用的日期格式。它似乎在循环它们并且需要很长时间。
以下是自定义函数:
Function FL_YR_PDxWK(MY_DATE)
FL_YR_PDxWK = FL_YEAR(MY_DATE) & "_" & Right("00" & FL_PERIOD(MY_DATE),
2) & "x" & FL_WEEK(MY_DATE)
End Function
看这2个:
Function FL_PERIOD(MY_DATE)
If DatePart("yyyy", MY_DATE + (7 - Weekday(MY_DATE))) = DatePart("yyyy",
MY_DATE) Then
If Application.WorksheetFunction.Ceiling((DatePart("ww", MY_DATE) /
4), 1) = 14 Then
FL_PERIOD =
Application.WorksheetFunction.Ceiling((DatePart("ww", MY_DATE) / 4), 1) - 1
Else
FL_PERIOD =
Application.WorksheetFunction.Ceiling((DatePart("ww", MY_DATE) / 4), 1)
End If
Else
FL_PERIOD = 1
End If
End Function
与
Function FL_WEEK(MY_DATE)
If DatePart("yyyy", MY_DATE + (7 - Weekday(MY_DATE))) = DatePart("yyyy",
MY_DATE) Then
If DatePart("ww", MY_DATE) Mod 4 = 0 Then
FL_WEEK = 4
Else
If DatePart("ww", MY_DATE) = 53 Then
FL_WEEK = 5
Else
FL_WEEK = DatePart("ww", MY_DATE) Mod 4
End If
End If
Else
FL_WEEK = 1
End If
End Function
【问题讨论】:
-
能否请您稍微解释一下每个功能的目的是什么?
-
你回答了你自己的问题:
it is is running through 2 other custom functions... 通过压缩为一个来提高效率,并确保任何给定的值只需要计算一次(如果需要重复,请使用变量或数组而不是函数。) -
...而且,正如@JosephSerido 所说,您的函数需要 cmets 和其他解释,并且一些示例数据也会有所帮助关于您正在尝试做的事情的一些背景知识。 (否则就像说,“我的房子倒了,这锤子怎么了?”)见minimal reproducible example。
-
另外,我强烈建议在您的模块中指定
Option Explicit,指定您的函数是public还是private,始终说明您打算使用ByRef还是ByVal,以及明确指定函数返回的类型public MyFunc(ByRef myString) As Boolean -
使用函数的结果值而不是函数本身。并使用变体数组来获取结果。
标签: vba excel user-defined-functions