1

我有以下情况:

我有一个工作表,其中包含估计小时数的工作列表。可以使用 C 列将这些时间分配给用户(列在 D 和 E 列中)。现在我想在 DE 和 F 列中计算每个用户的分配时间。

我可以使用以下函数填写未计算字段的值:我已经在使用以下函数(为了便于阅读,删除了 $ 符号,并且我使用记录 3 作为示例,因为它不是计算的)

  • 分配时间的计算:=IF(C3=D1;B3;0)。因此,如果用户的名称等于分配的用户的名称,则将使用该值,否则为 0。
  • 未分配时间的计算:=SUM(D3:E3) - B3。因此,如果指定的用户在列中不存在,则不会指定小时数。
    • 编辑我已经编辑了未分配时间的计算。以前的版本是:=IF(AND(C3<>D1; C3<>E1);B3;0)

这两个计算工作正常,但当然不适用于计算字段。

我想要完成的

现在我想填写关于问号的计算。如果您知道计算字段的放置位置,这很容易,但可以无处不在。所以我需要一个函数来做以下事情:

if: The value of columns B is calculated
then: calculate all values for the certain user until the next calculated row 
else: use one of the two calculations I have already described

使用样品表要求的结果:

  • ?1?SUM(D3;D6)
  • ?2?SUM(E3;E6)
  • ?3?SUM(F3;F6)
  • ?4?SUM(D8;D9)
  • ?5?SUM(E8;E9)
  • ?6?SUM(F8;F9)

示例表

       A          B            C           D            E           F
1|   Tasks   |   Hours   |Assigned To|   User1   |   User2   |Not Assigned|
2|Main Task  |=SUM(A3:A6)|           |    ?1?    |    ?2?    |     ?3?    |
3|  Sub Task |    10     |   User1   |    10     |           |            |
4|  Sub Task |    25     |   User2   |           |    25     |            |
5|  Sub Task |    14     |   User2   |           |    14     |            |
6|  Sub Task |    17     |   User1   |    17     |           |            |
7|Main Task  |=SUM(A8:A9)|           |    ?4?    |    ?5?    |     ?6?    |
8|  Sub Task |    22     |   User2   |           |    22     |            |
9|  Sub Task |    43     |           |           |           |     43     |

说明:
A:与父任务相比,每个子任务都有一个额外的缩进(使用缩进按钮)。

Column B:如果item包含子item,将计算此列中的值

Task 1        Calculated because contains subtasks (Task 1.1 and Task 1.2)
 Task 1.1     Calculated because contains subtasks (Task 1.1.1 and Task 1.1.2)
  Task 1.1.1  Not calculated because no subtasks
  Task 1.1.2  Not calculated because no subtasks
 Task 1.2     Not calculated because no subtasks
Task 2        Not calculated because no subtasks
Task 3        Calculated because contains subtasks (Task 3.1)
 Task 3.1     Not calculated because no subtasks

Column C:只能将未计算的列分配给用户

D - E:标题包含可以分配任务的用户的名称

F:包含每个任务未分配的小时数

4

1 回答 1

2

您可以确定哪些单元格具有如下公式:

Range formulaCells = range.SpecialCells(XlCellType.xlCellTypeFormulas);

[为 VBA 编辑]

您可以创建一个用户定义的函数,如在Excel VBA中的单元格是否具有公式中的函数,然后像这样使用它:

=IsFormula(A1)

于 2012-05-09T15:23:20.230 回答