【问题标题】:Wrapping IF ISERROR around INDEX function将 IF ISERROR 包裹在 INDEX 函数周围
【发布时间】:2013-08-16 06:37:42
【问题描述】:

我在 Excel 2003 中遇到了一个动态列表问题,其中一些我想为空的单元格返回 #NUM!。我曾尝试操作以下代码,但无济于事:

=IF(ISERROR(INDEX(venue_name, SMALL(IF(($A$10=date_ns)*(COUNTIF($A$13:A29,venue_name)=0), ROW(date_ns)-MIN(ROW(date_ns) )+1, ""), 1)))

我知道它与语法/括号有关,但尝试不同的组合让自己筋疲力尽。没有IF(ISERROR( 和右括号,代码运行得非常好。

【问题讨论】:

  • 我不确定它是否损坏,但你有不平衡的括号。
  • @pnuts 啊,好吧,现在说得通了^_^
  • 你能帮忙解决不平衡的括号吗?
  • =INDEX(venue_name, SMALL(IF(($A$10=date_ns)*(COUNTIF($A$13:A14,venue_name)=0), ROW(date_ns)-MIN(ROW(date_ns ))+1, ""), 1)) 这个工作正常。谢谢

标签: excel if-statement indexing excel-2003 parentheses


【解决方案1】:

要使用 ISERROR,您必须正常重复整个公式,但可能是由于匹配条件数量不足导致错误,因此请在 A14 中尝试此版本:

[更简单的修订版]

=IF(SUM(($A$10=date_ns)*(COUNTIF($A$13:A13,venue_name)=0)),INDEX(venue_name,MATCH(1,($A$10=date_ns)*(COUNTIF($A$13:A13,venue_name)=0),0)),"")

CTRL+SHIFT+ENTER确认并复制下来

....或者您可以使用不需要 CTRL+SHIFT+ENTER

的这个版本

=IF(SUMPRODUCT(($A$10=date_ns)*(COUNTIF($A$13:A13,venue_name)=0)),INDEX(venue_name,MATCH(1,INDEX(($A$10=date_ns)*(COUNTIF($A$13:A13,venue_name)=0),0),0)),"")

查看示例文件here

【讨论】:

  • 以上内容在删除#NUM!但不幸的是,这也从列表中删除了许多预期结果。
  • 好的,抱歉-我可能有点误解了,你是把公式放在A14里然后抄下来的。我将修改该场景的公式
  • 我将公式放入 A14 并复制下来,是的。顺便谢谢你的帮助。
  • 好的,所以修改了公式,但它重复了每个结果。有什么建议吗?
  • 我创建了一个测试工作表并测试了两个建议的公式 - 对我来说似乎工作正常 - 你使用了哪些公式 - 你有没有改变它?
【解决方案2】:

似乎已被事件所取代,但考虑到 =ISERROR,正如大师所说“你必须正常重复整个公式”。 (在具有 =IFERROR 的更高版本的 Excel 中不需要)。因此:

=IF(
ISERROR(
INDEX(venue_name, SMALL(IF(($A$10=date_ns)*(COUNTIF($A$13:A17,venue_name)=0), ROW(date_ns)-MIN(ROW(date_ns))+1, ""), 1))
)
,"",
INDEX(venue_name, SMALL(IF(($A$10=date_ns)*(COUNTIF($A$13:A17,venue_name)=0), ROW(date_ns)-MIN(ROW(date_ns))+1, ""), 1))
)  

第三行和第六行(INDEX ...)是“工作公式”。第一个、第五个和最后一个是 =IF 条件(如果为 TRUE,则假定需要空白结果)。第二行和第四行是 =ISERROR,如果发现错误(作为“工作公式”的结果)返回 TRUE,否则返回 FALSE。

可以表示为:=IF(工作公式错误,空白,工作公式)。

【讨论】:

    猜你喜欢
    • 2014-05-28
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多