我需要在 Excel 的单个列中记录从向下状态 (0) 到向上状态 (1) 的转换次数,我想知道 Excel 中是否有类似的逻辑,或者我是否可以在 VBA 中编写这种逻辑。但我对 VBA 不是很精通,所以如果有任何链接可用,那就太好了。
答案1
您可以使用单个公式来获取计数SUMPRODUCT
。如果您的数据为A1:A25
,则可以使用以下内容:
=SUMPRODUCT((A1:A25=0)*(A2:A26=1)*(NOT(ISBLANK(A1:A25))))
这仅计算列中一个值为 0(且不为空白)且后面的值为 1 的情况。
答案2
我的解决方案是假设干净的数据从单元格 A2 开始并向下移动到 A 列。对于我的公式,它还假设第 1000 行之后没有数据(对于大多数真实数据,请向上调整)。
公式是数组公式,因此使用 ctrl+shift+enter 输入
=SUM(IF(A2:A1000=0,IF(A3:A1001=1,1,0),0))
公式如何起作用。
对于 A2 至 A1000 的每个单元格,查找零,如果有零,则查找下一个单元格。如果下一个单元格中有 1,则将计数加一。请注意,空白单元格将计为零。
范围的末尾(A1000 和 A1001)必须超出数据的末尾。
答案3
如果您只想跟踪从下到上的变化(假设您的数据在 A 列中),那么您只需=N(A2>A1)
将公式向下拖动即可。
TRUE
如果值增加了(从下到上),则计算N(boolean)
结果为 1 或 0。
要跟踪所有状态变化,您可以使用=N(A2<>A1)
要计算所有状态变化,您需要对列求和。
答案4
您可以使用公式来检测从 1 到 0 和从 0 到 1 的转换。但要小心空白单元格!
考虑以下示例(见下面的屏幕截图):
B列包含二进制数据模式。
C2 将包含以下公式:
=IF(AND(NOT(ISBLANK(B3)),B2=1,B3=0),1,0)
D2 将包含:
=IF(AND(NOT(ISBLANK(B3)),B2=0,B3=1),1,0)
您只需要在 C 列和 D 列中自动填充所需行数的公式。
- C 列中的 1(一)的数量代表从 1 到 0 的转换数量。
- D 列中的 1(一)的数量代表从 0 到 1 的转换数量。
最后你需要将 C 列和 D 列的和相加 (1)
在下面的例子中:
D18=SUM(C2:C16)
D19=SUM(D2:D16)