作为一名前程序员,我喜欢干净,可维护和记录的代码。
作为一名项目经理,我不得不经常做复杂的擅长,并希望写出" clean"公式与我编写程序的方式相同。
(如何)我可以添加"评论"成为(多线)公式?
(如何)我可以"命名"一个(细胞相对)公式并重复使用它? (例如,将其写为带参数的vb(或甚至f#)函数)
示例1:而不是
=IF(AND(L$11+(L$13-1)*7>=$C15;L$11+(L$13-1)*7<$D15);VLOOKUP($A15;RessourcePlan;12+$E15;WRONG);0)
我想写:
// check if this columns (L) date is inbetween startdate (Col C) and enddate (Col D)
=IF (AND(L$11+(L$13-1)*7>=$C15;L$11+(L$13-1)*7<$D15);
// then select the the utilisation (12+E15) for the resp. team from the resource plan
VLOOKUP($A15;RessourcePlan;12+$E15;WRONG);
// else default to 0
0
) //ENDIF
而不是example1,我可能会写一个用户定义的函数(UDF)
Function Utilization(thisDate As Date, task As String) As Double
... // clean VB or F# code
End Function
然后写
=Utilization(L11,A15)
答案 0 :(得分:0)
作为一名前功能强大的程序员,我为我的问题提出了下面给出的用户定义函数。
请注意以下几点:
考虑到估计工作量和开始和结束日期的任务,我需要多少个人? =&GT; 100%意味着一个人需要在这个全职工作(假设她正在工作x天PerWeek,固定在常数中)
Public Function util(ByVal startDate As Date, ByVal endDate As Date, ByVal estimation As Double) As Double
Dim duration As Integer
Let duration = DateDiff("d", startDate, endDate)
Dim weeks As Double
Let weeks = duration / 7
Dim pdays As Integer
Let pdays = weeks * [daysPerWeek]
util = estimation / pdays
End Function
由于我有许多任务和许多团队正在处理它们,我想知道我需要一个团队来完成一项任务的人数。以下函数重用上面的函数。请注意复杂Vlookup调用的可读名称以及对&#34; BaseLine1&#34;的引用。这是我的实际项目计划。扩展它以获得其他场景等非常容易。
Public Function currentUtil(currentDate As Date, id As String, team As Integer) As Double
Dim result As Double
Let startDate = Application.WorksheetFunction.VLookup(id, [BaseLine1], 11, 0)
Let endDate = Application.WorksheetFunction.VLookup(id, [BaseLine1], 12, 0)
Let estimation = Application.WorksheetFunction.VLookup(id, [BaseLine1], 5 + team, 0)
If (currentDate >= startDate And currentDate < endDate) Then
result = util(startDate, endDate, estimation)
Else
result = 0
End If
currentUtil = result
End Function
最后我通过以下方式使用它:我有一个包含所有任务的主表,包括日期和每个团队的估计工作量。在另一张表中,我在横向上有几个星期,在垂直上有每个团队的任务。在单元格中,我使用函数&#34; currentUtil&#34;并使用自动完成和条件格式来获得计划的分析视图。
最后,我得到了与以前相同的结果,但是以更加方便和可维护的形式。