作为曾经的程序员,我喜欢干净,维护和记录代码。
作为项目经理,我不得不从时间做复杂的过人之处时间和想写以同样的方式,我写的程序“干净”的公式。
(如何)我可以添加“意见”为(多)的公式?
(如何)我可以“名”(相对细胞)公式和重用呢? (例如,它写为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
而代替例1我可能会写一个用户定义函数(UDF)
Function Utilization(thisDate As Date, task As String) As Double
... // clean VB or F# code
End Function
然后写
=Utilization(L11,A15)
作为一个功能前程序员,我想到了我的问题下面给出的用户自定义函数。
请注意以下几点:
- 我只写在-PARAMS映射到结果“纯”的数学函数,没有状态的变化,输入/输出,for循环或参与相似。 (至少我有这个想法,“让”和VBA显然不是“纯”。)
- 单元格引用,并自动完成是在张做(Excel是强在这里)
- 常数是用一种称为特殊片材定义为命名区域“常量”
给定一个任务,估计的努力和开始和结束日期,有多少美眉们,我需要? => 100%表示一个人需要对这个专职工作(假设她正在X daysPerWeek,如固定在常数)
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通话和参照“BaseLine1”这是我的实际项目计划中的可读的名字。 这将是很容易扩展,以让其他情形等。
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
最后,我用它的方式如下:我有一个主表的所有任务,包括他们的日期和每个小组估计的努力。 在另一片,我对水平和垂直每队的任务的星期。 在细胞中我使用功能“currentUtil”,并使用自动完成和条件格式以取得该计划的分析视图。
最后,我像以前一样有相同的结果,但在一个更方便,更易于维护的形式。