我需要帮助开发一个 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),1
N-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)))
我相信你还能想到其他的变化。