在Google表格中,我使用过滤器功能将“名称”拉入A列,将“时间戳记”拉入B列。每当第二次出现该名称时,该列表的A列和B列中我都希望列C列在前一个出现的列旁边引用新的时间戳。然后,在DI列中,将根据名称时间戳和该名称的下一次出现次数计算出差异。
目前,我正在使用以下公式:
=IFERROR(INDEX(B3:B,MATCH(A2,A3:A,0)))
如果我将此公式向下拖动,它会完成我需要做的事情,但是由于前两列中添加了多少行,由于过滤器的缘故,行被添加到工作表的底部,因此公式一直需要被拖下去。D列中的持续时间是使用以下公式计算的,该公式将自动排列结果并自动使用过滤器结果进行扩展:
=IFERROR(ARRAYFORMULA(IF(C2:C="","",C2:C-B2:B)))
我希望索引匹配公式执行相同的操作,但是似乎无法将索引公式与arrayformula一起使用。
我试图通过使用vlookup结合范围的偏移量来实现此目的。第一行给了我想要的结果,但是随后的所有行都没有引用偏移量范围,可能是因为偏移量不会随着每个新数组的变化而改变,这是尝试的结果:
=IFERROR(ARRAYFORMULA(VLOOKUP(A2:A,OFFSET(A2:B,1,0),2,FALSE)))
有什么想法可以通过将公式放在一个单元格中来完成,还是必须通过脚本来完成?
我在此处添加了当前方法的电子表格示例
在此先感谢您的帮助。
代替
INDEX, MATCH and OFFSET
试试下面的公式
=ArrayFormula(IFERROR(VLOOKUP(
TRANSPOSE(VALUE(REGEXEXTRACT(QUERY(TRANSPOSE(
IF(FILTER(ROW(A2:A),LEN(A2:A))<TRANSPOSE(FILTER(ROW(A2:A),LEN(A2:A))),
IF(FILTER(A2:A,LEN(A2:A))=TRANSPOSE(FILTER(A2:A,LEN(A2:A))),
TRANSPOSE(FILTER(ROW(A2:A),LEN(A2:A))),
),)
),,2000000),"(\d+)"))),
FILTER({ROW(A2:A),B2:B},LEN(A2:A)),2,0)))
这部分创建一个方矩阵,该矩阵显示如果该值低于当前行,则该行的行号匹配:
IF(FILTER(ROW(A2:A),LEN(A2:A))<TRANSPOSE(FILTER(ROW(A2:A),LEN(A2:A))),
IF(FILTER(A2:A,LEN(A2:A))=TRANSPOSE(FILTER(A2:A,LEN(A2:A))),
TRANSPOSE(FILTER(ROW(A2:A),LEN(A2:A))),
),)
此部分采用与当前行匹配的最小行(下一次出现的行值)
TRANSPOSE(VALUE(REGEXEXTRACT(QUERY(TRANSPOSE( ),,2000000),"(\d+)")))
此部分返回相关值(如果有),否则返回空白:
IFERROR(VLOOKUP( ,FILTER({ROW(A2:A),B2:B},LEN(A2:A)),2,0)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句