在一个封闭的工作簿SUMIF
我得到了以下工作公式:
={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是当前月份,Month是12个月的列表,List由2个区域组成,第一个是我需要与B:B范围比较的唯一ID,第二个区域是12个布尔值列,告诉我是否我其实想要考虑所需月份的ID。
如果我只是使用Microsoft KB转换它,以下将无法工作(#N / A!错误,如果作为数组公式input,我只是得到工作表的总行数,如果我作为一个正常的公式input) :
={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的回答后,这里是我有确切的公式(还有一点简化)。 第二个(他的答案)并不给我完全相同的数字,因为它将H列中B列为空的数字加起来(即使列表中没有任何空行)。
加工
=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 ))
你的问题是,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
将只使用“使用范围”,这将使用整列),所以,如果可以,我build议使用更有限的范围
我猜这个列表和月份是closures的工作簿中命名的范围。 在这种情况下,您无法在已closures的工作簿中引用已命名的范围。 将List
和Month
使用转换为closures的工作簿中的实际单元格引用。