INDEX 和 MATCH 在 Google 表格中返回不正确的值

INDEX and MATCH return incorrect values in Google Sheets

提问人:Artem 提问时间:9/22/2023 最后编辑:Artem 更新时间:9/25/2023 访问量:116

问:

有一个表格,其中每一行都是来自 CRM 系统的事件。A 列包含 ID,B 列包含事件的日期和时间。根据 ID,我需要计算下一个事件和上一个事件之间的持续时间。不操作表。

AMOCRM ID 引线 = 8952 变更日期 小时差
2105687 2020-08-24 14:54:10
2104881 2020-08-24 14:54:11
2105687 2020-08-24 14:54:26 0:00:00
2105687 2020-08-24 14:54:28 0:00:00
2106409 2020-08-24 15:04:18
2104881 2020-08-24 15:07:29 0:13:18
2117085 2020-08-24 17:07:51
2117085 2020-08-24 17:07:53 0:00:00
2166941 2020-08-25 9:04:36
2104881 2020-08-25 9:08:13 18:00:44
2104881 2020-08-25 9:08:14 18:00:45
2105687 2020-08-25 9:08:17 18:13:49
2106409 2020-08-25 9:09:45 18:02:16
2106409 2020-08-25 9:09:48 18:02:19
2117085 2020-08-25 9:10:17 0:00:00
2117085 2020-08-25 9:10:20 16:02:27
2170075 2020-08-25 9:49:11
2106409 2020-08-25 18:32:54 9:23:06
2515935 2020-08-25 18:57:26
2515935 2020-08-26 10:28:07 0:00:00
2560737 2020-08-26 15:27:34
2117085 2020-08-27 12:25:40 51:15:20
2104881 2020-08-27 12:37:04 69:29:35
2117085 2020-08-27 15:24:54 54:14:34
2104881 2020-08-27 15:35:33 72:41:22
2515935 2020-08-31 14:54:42 0:00:00
2105687 2020-08-31 17:25:34 170:31:06

我在下面尝试了这个组合,以及其他一些具有相同逻辑的组合

=IF(COUNTIF(A$2:A2, A2)>1, B2-INDEX(B$2:B2, MATCH(A2, A$2:A2, 1)), "")

但在某些情况下,它无法正常工作。 下面是筛选后的示例:

enter image description here

第 3、7 和 11 行工作。但在 12(应该有 00:00:01)和 24(应该有 51:28:50)中,它不是从前一个事件中减去值,而是从 7 行中减去值。在第 26 行(应该有 02:58:29)中,它从第 3 行中减去。

Google-Sheets 索引匹配 项查找

评论

1赞 cnavar 9/22/2023
请不要以图像的形式分享示例数据,而是以示例表的形式共享,以便我们可以轻松重现问题并更好地为您提供帮助。谢谢!
0赞 p._phidot_ 9/22/2023
A2 n A3 是否包含相同的数字?
0赞 Artem 9/22/2023
不。我进行了筛选以显示存在问题的地方。为了澄清,我将未经过滤的样本添加到原始帖子中。
0赞 Tedinoz 9/24/2023
继@cnavar的评论(似乎被忽略了)之后。请勿发布代码、数据、错误消息等图像 - 将文本复制或键入到问题中。请阅读 如何问我问一个好问题?.有几种方法可以将数据包含在 Markdown 表中,包括 www.tablesgenerator.com 的免费在线服务
0赞 Artem 9/25/2023
太好了,我现在明白了。对于我可能造成的任何混乱,我深表歉意。谢谢你的帮助。

答:

0赞 rockinfreakshow 9/25/2023 #1

您可以尝试:

=map(A2:A,B2:B,lambda(Σ,Λ,if(or(Σ="",Λ=""),,iferror(let(Γ,counta(A2:Σ)-1, Ξ,xlookup(Σ,offset(Σ,-Γ,,Γ),offset(Λ,-Γ,,Γ),,,-1),
     if(len(Ξ),Λ-Ξ,))))))
  • 将“小时差”列的格式设置为“持续时间
  • 这用作 ArrayFormula;因此,请确保输出列没有任何现有数据/公式,以便formula_output自由流动而不会引发错误

enter image description here

评论

0赞 Artem 9/25/2023
非常感谢您的回答。我不知道为什么,但它返回空单元格。我检查了一切。
0赞 Artem 9/25/2023
哇!它有效!我刚刚在 28 行上用这样的小样本测试了它。问题是我的数据集超过 40000 行,并且出现错误“尝试计算此公式时已达到计算限制”。
0赞 rockinfreakshow 9/25/2023
然后尝试拖动式公式(而不是数组公式)。这进入Cell_C2(如上面的屏幕截图所示)=iferror(let(Γ,counta(A$2:A2)-1, Ξ,xlookup(A2,offset(A2,-Γ,,Γ),offset(B2,-Γ,,Γ),,,-1), if(len(Ξ),B2-Ξ,)))
0赞 Artem 9/26/2023
非常感谢您的帮助!非常感谢您的帮助。展望未来,我计划进一步了解该过程的运作方式。
0赞 Artem 9/26/2023
让我再问一个问题。我调整了您的公式以返回当前事件和下一个事件之间的差值,如下所示: ,但又出了点问题。=IFERROR(LET(Γ,COUNTA(A$2:A2), Ξ,XLOOKUP(A2,OFFSET(A2,1,,Γ),OFFSET(B2,1,,Γ),,,-1), IF(LEN(Ξ),Ξ-B2,)))