Excel VBA - 忽略If语句的数组公式

时间:2017-02-28 18:54:07

标签: arrays excel excel-formula

我是数组公式的新手。流量应该是如果列表中没有数据输入数组或只有1个条目,则显示“添加重量”[总共7个点]。一旦在数组中的任何位置输入了两个任何数据,它就会检查数组中的FIRST值并减去数组中的LAST值。

我得到的这个问题是,当数组为空而不是显示“添加权重”时,单元格显示#value。一旦输入数据,该公式就可以正常工作,并且无论它们在数组中的位置如何,都可以正确地从第一个条目中减去最后一个条目。

这会查找数组中的最后一个条目。

LOOKUP(2,1/(1-ISBLANK(D13:D19)),D13:D19))

这会查找数组中的第一个条目。

INDEX(D13:D19,(MATCH(FALSE,ISBLANK(D13:D19),0)))

是因为公式被标记为数组吗?

=IF(COUNTIF(DailyProgress[Change],"")>6,"Add Weight",LOOKUP(2,1/(1-ISBLANK(D13:D19)),D13:D19))-INDEX(D13:D19,(MATCH(FALSE,ISBLANK(D13:D19),0)))

如果有更好的方法来写这个,我全都听见了。

编辑:

在相邻的列中,我显示了与前一个单元格的变化,如下所示:

=IF([@[Weight (lbs)]]="","",[@[Weight (lbs)]]-D17) 

其中D17是当前行上方的单元格[这将在第18行输入]。

实际上,如果相邻单元格正上方的单元格为空,则将其显示为零并执行“0 - value = -value”,因此我们刚刚进行了更改,我希望将其与LAST输入单元格进行比较在它之前而不是它正上方的细胞。我知道这需要完全重写。仍在使用D13:D19数组。

1 个答案:

答案 0 :(得分:1)

使用此数组公式:

=IFERROR(IF(MATCH(FALSE,D13:D19="",0)=MATCH(1E+99,D13:D19),"Add Weight",INDEX(D13:D19,MATCH(1E+99,D13:D19))-INDEX(D13:D19,MATCH(FALSE,D13:D19="",0))),"Add Weight")

在D13:D19中至少有两个条目之前,它将返回Add Weight

作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果操作正确,那么Excel会将{}放在公式周围。

FWIW:

您的COUNTIF不起作用的原因是标准,将""更改为"="并计算空白:

COUNTIF(DailyProgress[Change],"=")>6