是否有可能在excel中维护单元格中的值?

时间:2014-03-01 17:20:43

标签: excel

以下是我正在使用的内容:

    A     B     C     D      E     F
1 |  2/22    |    2/28   |    3/1     |
2 |Est | Act | Est | Act |  Est | Act | 
3 | 8    10     2     1      1     0  |

在此示例中,日期单元格已合并,目标是日期应跨越其下方的Estimated和Actual列。

我要做的是将这些值的总和放在:

如果今天小于或等于此处A列中的日期,请将该日期以来的实际值相加。否则,如果今天大于A列中的日期,则将估计值相加,因为我试图获得包括预测值在内的总时数。

所以我写了一个我认为会这样做的公式:

=SUM(IF(TODAY()<=A1:F1,IF(A2:F2="Act",A3:F3),IF(TODAY()>A1:F1,IF(A2:F2="Est",A3:F3))))

我开始的那天是2/28,我的希望是总数为11(Act)+ 1 Est = 12。

在这种情况下,由于我的公式查看了“合并”下面的所有单元格,我不确定它是否可行。如果我在这个例子中打印出A1和B1的值,我将分别得到2月14日和1月1日,这对我的公式来说是个问题

这有意义吗?有可能绕过它吗?

1 个答案:

答案 0 :(得分:1)

也许有点像这样:

=SUMPRODUCT((A1:F1<=TODAY())*(A1:F1<>"")*B3:G3)+SUMPRODUCT((A1:F1>TODAY())*A3:F3)

乘法是适用条件的。

A1:F1<=TODAY()获取今天和之前的所有日期。

A1:F1<>""确保不包含空白单元格(在合并单元格中,只有最右上角的单元格地址具有值,而其他单元格地址被视为空白)。

B3:G3是一个以实际值开头的范围。

SUMPRODUCT((A1:F1<=TODAY())*(A1:F1<>"")*B3:G3)获取所有实际值的总和。

稍微复杂一点SUMPRODUCT((A1:F1>TODAY())*A3:F3)得到所有估计值的总和。


更详细地说,A1:F1<=TODAY()会返回一个true和false数组,A1:F1<>""A1:F1>TODAY()也是如此。在您的示例中,我们有A1:F1<=TODAY(),即:

{2/22,0,2/28,0,3/1,0}<=TODAY()

给出数组{TRUE,TRUE,TRUE,TRUE,FALSE,TRUE}。同样,`A1:F1<>""给出数组:

{TRUE,FALSE,TRUE,FALSE,TRUE,FALSE}

当相乘时,它们被转换为1和0,1为真,0为假。 (A1:F1<=TODAY())*(A1:F1<>"")因此给出了数组:

{1,0,1,0,0,0}

因为只有当TRUE乘以另一个TRUE时才会得到1,并且只要乘法中涉及FALSE就会得到0。

然后数组变为:

{1,0,1,0,0,0}*B3:G3

这是:

{1,0,1,0,0,0}*{10,2,1,1,0,0}

并给予:

(10,0,1,0,0,0}

SUMPRODUCT然后将这些数字添加到11`

同样,如果我们有SUMPRODUCT((A1:F1>TODAY())*A3:F3),我们会得到:

SUMPRODUCT({FALSE,FALSE,FALSE,FALSE,TRUE,FALSE}*{8,10,2,1,1,0})

给出1。