我得到了以下工作公式:
={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
))
答案 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)
我猜这个列表和月份是封闭工作簿中的命名范围。在这种情况下,您无法在已关闭的工作簿中引用命名范围。将您对List
和Month
的使用转换为已关闭工作簿中的实际单元格引用。