Excel 2007-如何确定列是否已计算

Excel 2007-如何确定列是否已计算,excel,excel-2007,Excel,Excel 2007,我有以下情况: 我有一份工作表,其中包含一份工作清单和估计的工作时间。 可以使用C列将这些小时分配给用户(在D列和E列中列出)。 现在,我要计算D列E和F列中每个用户分配的小时数 我可以使用以下函数填写未计算字段的值: 我已经在使用以下函数(为了可读性删除了$符号,并且我使用记录3作为示例,因为它没有计算) 分配小时数的计算:=IF(C3=D1;B3;0)。因此,如果用户名等于分配的用户名,则将使用该值,否则为0 未分配小时数的计算:=总和(D3:E3)-B3。因此,如果列中不存在分配的用户,

我有以下情况:

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

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

  • 分配小时数的计算:
    =IF(C3=D1;B3;0)
    。因此,如果用户名等于分配的用户名,则将使用该值,否则为0
  • 未分配小时数的计算:
    =总和(D3:E3)-B3
    。因此,如果列中不存在分配的用户,则不分配小时数。
    • 编辑我已编辑了未分配小时数的计算。以前的版本是:
      =IF(AND(C3D1;C3E1);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?
    和(D3;D6)
  • ?2?
    总和(E3;E6)
  • ?3?
    总和(F3;F6)
  • ?4?
    总和(D8;D9)
  • ?5?
    总和(E8;E9)
  • ?6?
    总和(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
:与其父任务相比,每个子任务有一个额外的缩进(使用按钮)

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

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
C
:只能将未计算的列分配给用户

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


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

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

Range formulaCells = range.SpecialCells(XlCellType.xlCellTypeFormulas);
[为VBA编辑]

您可以创建一个用户定义的函数,如Excel VBA中的函数,然后按如下方式使用它:

=公式(A1)


你为什么不把可乐中的
SUM()
公式填到其他列呢?恐怕你的例子没有什么意义。首先,你的
SUM
s将是循环引用。此外,您的桌子似乎布局不好,甚至多余。本工作表的总体目标是什么?如果你问我认为你是什么,那么为什么不插入一个包含总计行的表,然后从cols C:E的下拉框中选择
SUM
?事实上,您可以对col A执行此操作,然后只过滤col B(用户)以查看他们的总小时数。请澄清你的目标。@Zairja你能解释一下为什么
SUM
s是循环引用吗?@Zairja:主要目标是将所有用户都集中在任务旁边,并显示特定用户需要在哪里花费时间。我知道这是多余的,但如果我的问题得到解决,它有一些价值。我知道我可以使用过滤器,但您仍然需要将其分组并按主要任务进行计算。还请注意,我不允许更改前3列。因此,它提供了经过计算的主任务和多个子任务。我必须使用这种结构。@hwcverwe您能提供一个屏幕截图或提供一些关于a列如何组织的更多说明吗。我心中有一些解决方案,但他们必须知道你如何判断新的“主要任务”何时开始。它们是如何组织的?您如何区分子任务的结束位置和下一个主任务的开始位置?此外,您不能更改Cols A:C,但任务的
小时数之和总是会被计算出来(例如B2、B7)还是有时为空?谢谢您的回答。这是否意味着我需要使用宏来解决我的问题?@hwcwer抱歉,我以为你已经在自动化了。这可能不是一个要求,但是,在快速搜索Excel文档之后,使用VBA将是我的第一条攻击线。如果你想走VBA路线,我可以提供额外的例子。注意:上面的代码来自C#Excel interop。没问题。仍然有兴趣了解stackoverflow的其他用户。但是你能给我举个VBA的例子吗。提前谢谢