如何计算 Excel (Calc) 中的连续变化范围

How to count a streak in Excel (Calc), with a changing range

我正在创建一个电子表格来跟踪我来年的习惯,我希望既能显示简单的计数,又能显示每个习惯的当前连续记录。我已经搜索并找到了一个计算连胜的答案,但这个答案不适用于实时跟踪器(每天将结束列增加一个),并且还要求没有空白字段(1 或 0 个条目) .

=COUNTA(S:S)-MATCH(2, 1/(S2:S=0), 1)

如果我在匹配中将上面的内容从 =0 切换为 ="",它会非常引人注目地中断,并且在任何情况下它都会在包含 366 天的范围内完全失败,但当前日期 <366。我会通过标记为 "logging" 的习惯行来跟踪 "current day",我每天都会填充它,无论是否记录了任何其他习惯。这可以用公式实现吗?

根据我得到的将 1 和 0 连接到字符串的建议,然后我使用

获得了一个成功的连胜公式
=IFERROR((LEN(NG3)-SEARCH("0[^0]*$",NG3)),LEN(NG3))

其中 NG 是串联所在的列,第 3 行是第一行数据。 然后我基本上复制了我的日历以允许非二进制日志记录(将任何空白或 0 条目转换为 0,所有其他条目转换为 1),并视 "logged" 行的填充情况而定,以便未记录的天数为空领域。现在就像一个魅力。

我对此算法的解读:

  1. 如果您每次发生相同的事情时得到 1,而当您做不同的事情时得到 0。
  2. 然后你将所有的 0 和 1 连接成一个长字符串。
  3. 然后将字符串以0为基点拆分成数组,去掉所有的0。
  4. 然后最后统计出数组的最大长度result

在公式中输入以下内容:

=MAX(LEN(SPLIT(B1,"0")))
  • 然后按 Shift + Ctrl + Enter on Windows
  • Cmd + Shift + Enter on a Mac

这会将公式转换为 ArrayFormula

(你需要这样做,因为如果你刚刚输入

=SPLIT(B1)

C1 中,它将生成一系列列,每个数组条目一个,填充 C1、D1、E1 等...)。

公式如下:

这是输出:

GoogleDocs

中的示例电子表格

您可以 upload/download/convert 它在 Googledocs 和 LibreOffice 之间。

没有使用过该电子表格解决方案。

但现在大多数都非常相似。