SUMIF在封闭的工作簿中

时间:2014-08-05 17:39:40

标签: excel excel-formula excel-2010

我得到了以下工作公式:

={SUM(SUM.IF(
    'Sheet1'!$B:$B;
    IF(INDEX(List;;MATCH($D$4;Month;0);2);INDEX(List;;1);0);
    'Sheet1'!$H:$H
))}

如果范围(Sheet1)实际上是在一个已关闭的工作簿中,我想使它工作。我找到了以下文章:

http://support.microsoft.com/kb/260415

我不知道从哪里开始使其工作假设B:B和H:H在另一本工作簿中。

D4是当前月份,月份是包含12个月的列表,列表由2个区域组成,第一个区域具有我需要与B:B范围进行比较的唯一ID,第二个区域包含12个布尔列告诉我,我是否真的想要考虑所需月份的ID。

如果我只是使用Microsoft KB进行转换,则以下操作无效(#N / A!错误,如果作为数组公式输入,我只需输入表单的总行数)作为一个正常的公式):

={SUM(IF(
    '[myFile.xlsx]Sheet1'!$B:$B = IF(INDEX(List;;MATCH($D$4;Month;0);2);INDEX(List;;1);0);
    '[myFile.xlsx]Sheet1'!$H:$H;
    0
))}

在@barry houdini的回答之后,这里是我的确切公式(仍然有点简化)。第二个(他的答案)并没有给我完全相同的数字,因为它确实将B列为空的H列中的数字相加(即使List没有任何空行)。

工作

=SUM(SUMIF(
    'April'!$B:$B;
    IF(INDEX(List;;4;2);INDEX(List;;1);0);
    'April'!$H:$H
))

几乎正常工作

=SUM(
    IF(
        ISNUMBER(
            MATCH('April'!$B:$B;IF(INDEX(List;;4;2);INDEX(List;;1);0);0)
        );
    'April'!$H:$H
))

2 个答案:

答案 0 :(得分:2)

您的问题是Excel不知道如何比较整个列...

'[myFile.xlsx]Sheet1'!$B:$B

到不同大小的列表,即

返回的列表

IF(INDEX(List;;MATCH($D$4;Month;0);2);INDEX(List;;1);0)

尝试使用MATCH来做到这一点,即

根据评论修改:

=SUM(IF('[myFile.xlsx]Sheet1'!$B:$B<>"",IF(ISNUMBER(MATCH('[myFile.xlsx]Sheet1'!$B:$B;IF(INDEX(List;;MATCH($D$4;Month;0);2);INDEX(List;;1);0);0));'[myFile.xlsx]Sheet1'!$H:$H)))

替代 .....(请参阅评论),以避免额外的IF

=SUM(IF(ISNUMBER(MATCH('[myFile.xlsx]Sheet1'!$B:$B;IF(INDEX(List;;MATCH($D$4;Month;0);2);INDEX(List;;1);"");0));'[myFile.xlsx]Sheet1'!$H:$H))

使用 CTRL + SHIFT + ENTER确认

MATCH会返回一个数字(当匹配时)或#N/A,因此当您将其包含在ISNUMBER中时,您会根据需要获得TRUE/FALSE个值的列表

注意:使用整列B和H可能会很慢(SUMIF只会使用&#34;使用的范围&#34;,这将使用整列)所以,如果可以的话,我建议使用更有限的范围

答案 1 :(得分:0)

我猜这个列表和月份是封闭工作簿中的命名范围。在这种情况下,您无法在已关闭的工作簿中引用命名范围。将您对ListMonth的使用转换为已关闭工作簿中的实际单元格引用。