我有一个数据集。在某一点触发了一个信号:它从 1 -> 0 变化(我知道列号),列看起来像这样
00000111111000022222233333(请转置此行)
我想编写一个执行此操作的命令(不一定是宏)
如果行 (x) = = 1 && 行 (x+1) = = 0
返回 x
问题是我不知道如何使用 IF(和... 没有行号...
提前感谢您的帮助
假设信号的列是 B 从第 1 行开始,然后在另一列中(例如 C 从 C2 开始)输入
=if(AND($B1=1,$B2=0),"Trigger","")
并向下复制,然后在触发器上过滤
以下公式将返回0
前面的1
的行号
=LOOKUP(2,1/((myRng=1)*(OFFSET(myRng,1,0)=0)),ROW(myRng))
您没有编写如果有多个触发器时要发生的情况。 上面将返回最后一个触发器的行号。
myRng
不能引用整个列,可以替换为例如 A1:A100
。 如果这样做,不妨将OFFSET(myRng,1,0)
替换为A2:A101
以使公式非易失性
解释:
(myRng=1)*(OFFSET(myRng,1,0)=0)
这会将 myRng
中的每个单元格乘以下一个单元格。 如果第一个 = 1,第二个 = 0,则因子解析为TRUE * TRUE
并返回1
。 所以上面的将返回一个看起来像这样的数组:
{0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
将该数组除以 1 将返回一个DIV/0
错误数组或1
。
然后,LOOKUP 公式将返回最后一个1
的位置,并使用行号数组进行result_vector
,将适当匹配它。