Ima*_*ad 5 vba microsoft-excel microsoft-excel-2010
我需要在 excel 的单列中记录从向下状态 (0) 到向上状态 (1) 的转换次数,我想知道 Excel 中是否有某种类似的逻辑,或者我是否可以编程这种逻辑VBA中的逻辑。然而,我不太精通 VBA,所以如果有任何可用的链接,那就太好了。
您可以使用单个SUMPRODUCT
公式获得计数。如果您的数据在 中A1:A25
,则可以使用以下内容:
=SUMPRODUCT((A1:A25=0)*(A2:A26=1)*(NOT(ISBLANK(A1:A25))))
Run Code Online (Sandbox Code Playgroud)
这仅计算列中的一个值为 0(而不是空白)且后面的值为 1 的情况。
小智 6
我的解决方案是假设从单元格 A2 开始到 A 列向下的干净数据。对于我的公式,它还假设没有超过第 1000 行的数据(针对大多数真实世界的数据向上调整此值。
公式是一个数组公式,所以使用 ctrl+shift+enter 输入
=SUM(IF(A2:A1000=0,IF(A3:A1001=1,1,0),0))
Run Code Online (Sandbox Code Playgroud)
公式如何运作。
对于每个单元格 A2 到 A1000 查找零,如果在下一个单元格中查找零。如果下一个单元格中有一个 1,则在计数中加 1。请注意,空白单元格将计为零。
范围(A1000 和 A1001)的末尾必须超过数据的末尾。
您可以使用公式来检测从 1 到 0 以及从 0 到 1 的转换。请小心空白单元格!
考虑以下示例(请参见下面的屏幕截图):
B 列包含二进制数据模式。
C2将包含以下公式:
=IF(AND(NOT(ISBLANK(B3)),B2=1,B3=0),1,0)
Run Code Online (Sandbox Code Playgroud)
D2 将包含:
=IF(AND(NOT(ISBLANK(B3)),B2=0,B3=1),1,0)
Run Code Online (Sandbox Code Playgroud)
您只需在 C 列和 D 列中自动填充所需行数的公式即可。
最后你需要将 C 列和 D 列中的 (1) 相加
在下面的例子中:
D18=SUM(C2:C16)
D19=SUM(D2:D16)
Run Code Online (Sandbox Code Playgroud)