以下是我正在使用的内容:
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日,这对我的公式来说是个问题
这有意义吗?有可能绕过它吗?
答案 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。