用于列出给定列的每日 运行 计数的每个单元格公式

Per-cell formula for tabulating daily running counts of a given column

跟进

我怎样才能达到与...相同的结果...

giv[ing] a running count of Issues for a given day. In other words: the output should enumerate each Issue for a given date (returning blank if Issue is blank), and then start again at 1 for the first issue in a subsequent date

...但是 使用 ArrayFormula?即我想在每一行中都有一个公式,但输出的值与第 J 列相同。原因是 iOS 应用程序在我每次打开这个电子表格时都会崩溃,因为我有 ArrayFormula 在那里。


Sample spreadsheet,查看“每行公式方法”选项卡:

=ArrayFormula(IF(F3:F="",,MMULT((ROW($B3:$B)>=TRANSPOSE(ROW($B3:$B))) * EXACT($B3:$B,TRANSPOSE($B3:$B))^1, ($G3:$G)^1)))

最简单的事情就是这样:

=IF(F3="",,
    INDEX(
        MMULT(
            (ROW(B:B)>=TRANSPOSE(ROW(B:B))) * 
                EXACT(B:$B,TRANSPOSE(B:B)),
            G:G
        ),
        ROW(F3)-2
    )
)

...如果您对每一行的 MMULTing 都满意的话。不过,我可以看到对于大型数据集来说这会变慢,假设 Sheets 实际上是每行计算一次。当然,如果将 MMULT 结果记忆为另一个 sheet 并使用该范围,效率会更高。

记忆MMULT()

我们可以创建一个新的sheet(我称之为“备忘录”)来记忆,或者cacheMMULT()所以它只需要计算一次。

=ArrayFormula(MMULT(
    (ROW('Formula per row method'!B3:B)>=TRANSPOSE(ROW('Formula per row method'!B3:B))) * 
        EXACT('Formula per row method'!B3:$B,TRANSPOSE('Formula per row method'!B3:B)),
    'Formula per row method'!G3:G
))

那么你原来的公式就变成了:

=IF(F3="",,
    INDEX(
        Memo!A:A,
        ROW(F3)-2
    )
)

但是,我不确定这是否适合你,因为你说 ArrayFormula() 没有用。不过,它可能会破坏您的原始用例,因此值得一试。