【问题标题】:Excel VBA - Array Formula Ignoring If StatementExcel VBA - 忽略If语句的数组公式
【发布时间】:2017-03-01 04:06:59
【问题描述】:

我对数组公式真的很陌生。如果列表没有在数组中输入数据或只有 1 个条目,则流程应该是,它显示“添加权重”[总共 7 个点)。一旦在数组中的任何位置输入了两条任意数据,它就会检查数组中的第一个值并减去数组中的最后一个值。

我遇到的这个问题是当数组为空时单元格显示#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”所以我们刚刚所做的更改我希望它与最后一个输入单元格进行比较在它之前而不是它正上方的单元格。我知道这需要完全重写。仍在使用D13:D19 数组。

【问题讨论】:

  • 1.如果单元格有公式,ISBLANK 将返回 false,即使该公式返回 ""。 2. 退出编辑模式时是不是用Ctrl-Shift-Enter而不是Enter?
  • 数组的列表都是空的,没有公式。我也在做 CTRL+SHIFT+ENTER
  • 可能会发布一些测试数据和预期结果。
  • @ScottCraner 刚刚添加了我遇到的情况,我意识到我错过了收到的错误

标签: arrays excel excel-formula


【解决方案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

【讨论】:

  • 你是个传奇。这非常有效。所以我可以多理解一点,我们使用 1E+99 是因为我们处理的是整数?这个值是如何确定的?很抱歉给您带来烦人的问题。
  • @BetaOp9 是的,带有数字 1E+99 如果是文本,那么将是 "ZZZ" 获取最后一个单元格。也刚刚意识到为什么您的 COUNTIF 不起作用。我会将其添加到答案中。
  • 这就解释了为什么 countif 不起作用。因此,随着这种变化,我在原始问题中提出了另一个问题。有什么见解吗?
  • 这是一个值得一提的新问题。
  • 很公平!看来我得等 90 分钟才能发新帖。
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多