【问题标题】:Formula Works Fine for Just Some Data(not All)公式仅适用于某些数据(不是全部)
【发布时间】:2017-12-23 06:18:34
【问题描述】:

my file here

在附件中,公式对于几个第一个客户 ID 非常有效,但在客户 ID 列表末尾的某个点上失败了。例如,在单元格 B2 中的工作表 2 上,当您输入客户 ID“8010001”时,与该客户相关的所有请求都从工作表 1 中获取。然后,如果您随后使包含请求 ID(在本例中为 8234276)的单元格处于活动状态并按“列出策略”按钮与此请求 ID 相关的所有策略都从表单 1 中获取。但此过程失败,例如对于客户 ID,例如 8010112、8010198 ......即使对于客户 ID 8010093 也不能完全工作。你可以试试看。

【问题讨论】:

  • 你能解释一下条件(C1=Sheet1!$J$2:$J$122)在你的公式中的作用吗?当您将复制公式时,它会将空列与 Sheet1 Column J 条目进行比较。
  • c1 的值始终为 1 ,这里的条件是只列出唯一的请求 id。
  • 因为您将复制下来,它不会保留 C1。应该是$C$1
  • 所有单元格都是C1,看看
  • 确实,看看我的回答,看看对你的情况有没有帮助!

标签: excel excel-formula


【解决方案1】:

在工作表 2 单元格 B2 (CTRL+SHIFT+ENTER) 中,以下公式:

=IFERROR(INDEX(Sheet1!$E$1:$E$122,SMALL(IF($C$1&$B$1=Sheet1!$J$1:$J$122&Sheet1!$A$1:$A$122,ROW(Sheet1!$E$1:$E$122),"a"),ROWS($A$1:A1))),"")

抄下来。

在工作表 2 单元格 I2 (CTRL+SHIFT+ENTER) 遵循 编辑 公式:

=IFERROR(INDEX(Sheet1!$D$1:$D$122,SMALL(IF($C$1&$A$1=Sheet1!$K$1:$K$122&Sheet1!$E$1:$E$122,ROW(Sheet1!$D$1:$D$122),"a"),ROWS($A$1:A1))),"")

抄下来。

你应该得到正确的结果。

EDIT2

SMALL(IF 部分) 的解释

$C$1&$B$1 - 两个单元格的简单串联,然后用于与工作表 1 中的完整串联数组进行比较,即Sheet1!$J$1:$J$122&Sheet1!$A$1:$A$122,这会产生布尔结果数组{TRUE,FALSE,TRUE...}

如果条件为 TRUE,则 IF 公式返回 ROW(Sheet1!$D$1:$D$122),它计算行号。在FALSE 结果的情况下,它会返回一个字符串"a",这会导致SMALL 公式出错。最终结果数组看起来像 {1,"a",3....}

现在使用SMALL,我们一一使用数字结果。在第一个单元格中,ROWS($A$1:A1) 的计算结果为 1,当我们将其复制下来时,它会生成后续数字,例如 2、3、4、5 等。因此,我们从上面的 IF 构造中一次选择一个结果。

您可以使用 Formula Evaluate 查看关于小型数据集的演示以更好地理解。

【讨论】:

  • @FighterJet 请参见此处实现的文件dropbox.com/s/8fcyz60ckjd5nl6/stackoverflow_47950789.xlsm?dl=0。让我知道哪些结果不正确。
  • 是的,它有效!谢谢你。但它需要一些修改。您忽略了“列表策略”按钮的作用,该按钮仅显示所选请求(活动单元格)的策略。当您输入客户 ID 时,公式不应自动列出所有策略。输入例如客户 ID 8010194。您可以进行这些修改并重新上传吗?
  • 啊,我现在看到要求了。因此,您基本上使用第一个公式在 B 列中列出请求 ID,然后通过选择 B 列中的任何一个单元格以查看 D 列中相应的非重复项,将结果复制到单元格 A1。我已经编辑了公式 #2。它现在应该适合你,你可以从同一个链接下载更新的文件。
  • 太棒了!你能多给我一点帮助,并解释一下 IF 语句和部分 ROWS($A$1:A1) 中的条件吗?
  • @FighterJet 太棒了!我已经添加了一些解释。看看对你来说是否足够。
猜你喜欢
  • 1970-01-01
  • 2017-05-15
  • 2013-11-28
  • 1970-01-01
  • 2021-03-20
  • 2015-12-30
  • 2012-04-22
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多