是否有一个 Excel 公式可以确定数字是否“堆叠”?

是否有一个 Excel 公式可以确定数字是否“堆叠”?

我需要帮助开发一个 Excel 公式,用于确定一个 4 位数字是否有“堆叠”数字(高于最后一位的数字,例如 1234、2356、5679),且没有任何重复的数字。例如,如果我在单元格中输入 4567,则公式会通过 0 或 1 输出(0 = 否,1 = 是)表明这是一个“堆叠”数字。这是基于数字范围从 0-9 并且第一位数字可以是零的假设。我已经搜索解决方案一段时间了,但不幸的是,我还没有找到任何解决方案。

如果您还能找到一个公式,它的作用相同,但针对的是 4 位数字,其中 3 位循环数字和 1 位堆叠数字(例如 3334、7779、4555),或 2 位循环数字和 2 位堆叠数字(例如 2234、3455、4556),或 2 对循环数字堆叠(例如 3344、6688、2288),也请告诉我。

答案1

如果您有 Office 365,则可以使用:

=AND(--MID(L1,SEQUENCE(LEN(L1)-1),1)<--MID(L1,SEQUENCE(LEN(L1)-1,,2),1))

或者

=AND(--MID(L1,SEQUENCE(LEN(L1)-1),1)<=--MID(L1,SEQUENCE(LEN(L1)-1,,2),1))

对于不重复的堆叠数字,第一个将显示 TRUE。
对于可能重复的堆叠数字,第二个将显示 TRUE。

如果您没有该SEQUENCE功能,您可以使用:

=AND(--MID(L1,ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(L1)-1)),1)<--MID(L1,ROW(INDEX($A:$A,2):INDEX($A:$A,LEN(L1))),1))

=AND(--MID(L1,ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(L1)-1)),1)<=--MID(L1,ROW(INDEX($A:$A,2):INDEX($A:$A,LEN(L1))),1))

算法

  • MID(L1,SEQUENCE(LEN(L1)-1),1N-1返回第一个字符的数组
  • MID(L1,SEQUENCE(LEN(L1)-1,,2),1))N-1返回最后一个字符的数组
  • 因此,要检测您正在寻找的模式类型,只需比较两个数组即可。

使用LET函数,因为逻辑更清晰:

仅限堆叠数字

=LET(x,--MID(L1,SEQUENCE(LEN(L1)-1),1),
     y,--MID(L1,SEQUENCE(LEN(L1)-1,,2),1),
     AND(x<y))

堆叠或不堆叠
可能都一样

=LET(x,--MID(L1,SEQUENCE(LEN(L1)-1),1),
     y,--MID(L1,SEQUENCE(LEN(L1)-1,,2),1),
     AND(x<=y))

堆叠但必须至少有一对
排除所有相同

=LET(x,--MID(L2,SEQUENCE(LEN(L2)-1),1),
           y,--MID(L2,SEQUENCE(LEN(L2)-1,,2),1),
           AND(x<=y,OR(x=y),OR(x<y)))

我相信你还能想到其他的变化。

在此处输入图片描述

答案2

这是一个强力公式,验证总长度并按顺序比较每个数字:

=(LEN(A1)=4)*(--LEFT(A1,1)<--MID(A1,2,1))*(--MID(A1,2,1)<--MID(A1,3,1))*(--MID(A1,3,1)<RIGHT(A1,1))

在此处输入图片描述

将布尔值相乘相当于使用 AND() 表达式。

相关内容