在Excel干净的代码?(Clean Code in Excel?)

2019-10-21 18:47发布

作为曾经的程序员,我喜欢干净,维护和记录代码。

作为项目经理,我不得不从时间做复杂的过人之处时间和想写以同样的方式,我写的程序“干净”的公式。

  1. (如何)我可以添加“意见”为(多)的公式?

  2. (如何)我可以“名”(相对细胞)公式和重用呢? (例如,它写为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)

Answer 1:

作为一个功能前程序员,我想到了我的问题下面给出的用户自定义函数。

请注意以下几点:

  • 我只写在-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”,并使用自动完成和条件格式以取得该计划的分析视图。

最后,我像以前一样有相同的结果,但在一个更方便,更易于维护的形式。



文章来源: Clean Code in Excel?