如何计算 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,而当您做不同的事情时得到 0。
- 然后你将所有的 0 和 1 连接成一个长字符串。
- 然后将字符串以0为基点拆分成数组,去掉所有的0。
- 然后最后统计出数组的最大长度result
在公式中输入以下内容:
=MAX(LEN(SPLIT(B1,"0")))
- 然后按 Shift + Ctrl + Enter on Windows
- 或Cmd + Shift + Enter on a Mac
这会将公式转换为 ArrayFormula。
(你需要这样做,因为如果你刚刚输入
=SPLIT(B1)
在 C1 中,它将生成一系列列,每个数组条目一个,填充 C1、D1、E1 等...)。
公式如下:
这是输出:
中的示例电子表格
您可以 upload/download/convert 它在 Googledocs 和 LibreOffice 之间。
没有使用过该电子表格解决方案。
但现在大多数都非常相似。
我正在创建一个电子表格来跟踪我来年的习惯,我希望既能显示简单的计数,又能显示每个习惯的当前连续记录。我已经搜索并找到了一个计算连胜的答案,但这个答案不适用于实时跟踪器(每天将结束列增加一个),并且还要求没有空白字段(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,而当您做不同的事情时得到 0。
- 然后你将所有的 0 和 1 连接成一个长字符串。
- 然后将字符串以0为基点拆分成数组,去掉所有的0。
- 然后最后统计出数组的最大长度result
在公式中输入以下内容:
=MAX(LEN(SPLIT(B1,"0")))
- 然后按 Shift + Ctrl + Enter on Windows
- 或Cmd + Shift + Enter on a Mac
这会将公式转换为 ArrayFormula。
(你需要这样做,因为如果你刚刚输入
=SPLIT(B1)
在 C1 中,它将生成一系列列,每个数组条目一个,填充 C1、D1、E1 等...)。
公式如下:
这是输出:
您可以 upload/download/convert 它在 Googledocs 和 LibreOffice 之间。
没有使用过该电子表格解决方案。
但现在大多数都非常相似。