我不知道如何在不使用 VBA 的情况下在 Excel 表格中格式化连续的相同(分别为偶数)值。 条件格式应仅对连续值和 进行着色 全 0 或全偶数,当有 不超过 2 时。
答:身份证 | B:二进制 | C:计数 |
---|---|---|
1 | 1 | 1 |
2 | 0 | 2 |
3 | 0 | 2 |
4 | 1 | 3 |
5 | 0 | 4 |
6 | 0 | 4 |
7 | 0 | 4 |
8 | 1 | 5 |
9 | 1 | 5 |
我尝试使用以下格式进行格式化:
=COUNTIF(C1:C9, C1) < 3
,但它也会为 1 和 C6:C7
着色,即使有超过 2 个。
我也尝试过
=AND( COUNTIF(C1:C9,C1) < 3, ISEVEN(C1:C9) )
,但后来它什么也没变色。
我可以用空单元格替换 0,这样我就可以检查 ISEMPTY(B1:B9)
,但它又没有任何颜色。使用 $ 设置绝对值也不会改变任何内容。
格式化重复项也会给三元组着色,这对我来说也不起作用。
=OR(COUNTIF($C$1:$C$9,C1) = 1, COUNTIF($C$1:$C$6,C1) = 2)
到目前为止有效,但也为 1 着色(不均匀)。
=AND(OR(COUNTIF($C$1:$C$9,C1) = 1, COUNTIF($C$1:$C$6,C1) = 2), ISEVEN($C$1:$C$9))
不起作用。
=AND(OR(COUNTIF($C$1:$C$9,C1) = 1, COUNTIF($C$1:$C$6,C1) = 2), $B$1:$B$9 <> 1)
也不起作用。
到目前为止我唯一的解决方案是使用 2 个格式化规则:
=OR(COUNTIF($C$1:$C$9,C1) = 1, COUNTIF($C$1:$C$6,C1) = 2)
=$B$1:$B$9 = 1
但我认为这很糟糕。 我花了几个小时研究它,也许我错过了一些非常明显的东西。
我不允许使用 VBA,因此这不是一个选项。
编辑:我的2.规则解决方案可以简化为:
=COUNTIF($C$1:$C$9,C1) < 3
=$B$1:$B$9 = 1
我仍然很困惑为什么两者结合起来不起作用:
AND(COUNTIF($C$1:$C$9,C1) < 3; $B$1:$B$9 <> 1)
EDIT2:我知道为什么它不起作用。不要用绝对值范围
<>1
检查 $B$1$:$B$9
解决方案:B1 <> 1
然后循环遍历。
现在将两部作品结合起来:
=AND( COUNTIF($C$1:$C$9, C1) < 3, B1 <> 1)
我看不到二进制数的简单答案。您有两种情况:
(1) 当前单元格为零,前一个单元格为 1,下一个单元格为零,下一个单元格为 1。
(2) 当前单元格为零,前一个单元格为零,前一个单元格为 1,下一个单元格为 1。
但是第一对数字是一种特殊情况,因为没有先前的单元格。
严格来说,最后一对数字也是一种特殊情况,因为没有后续单元格。
=OR(AND(ROW()=1,B$1=0,B$2=0,B$3=1),AND(ROW()=2,B$1=0,B$2=0,B$3=1),AND(B1=0,B1048576=1,B2=0,B3=1),AND(B1=0,B1048576=0,B1048575=1,B2=1))
我使用了这样一个事实,即您可以在条件格式中将范围换行到工作表的末尾(B1048576)。
添加范围末尾有两个零的情况的条件:
=OR(AND(ROW()=1,B$1=0,B$2=0,B$3=1),
AND(ROW()=2,B$1=0,B$2=0,B$3=1),
AND(B1=0,B1048576=1,B2=0,OR(B3=1,B3="")),
AND(B1=0,B1048576=0,B1048575=1,OR(B2=1,B2="")))
如果表格的最后几行有东西,即使这样也可能会出错,所以我想绝对安全:
=OR(AND(ROW()=1,B$1=0,B$2=0,B$3=1),
AND(ROW()=2,B$1=0,B$2=0,B$3=1),
AND(Row()>1,B1=0,B1048576=1,B2=0,OR(B3=1,B3="")),
AND(Row()>2,B1=0,B1048576=0,B1048575=1,OR(B2=1,B2="")))
较短:
=OR(AND(ROW()<=2,B$1+B$2=0,B$3=1),
AND(B1+B2=0,B1048576=1,OR(B3=1,B3="")),
AND(B1+B1048576=0,B1048575=1,OR(B2=1,B2="")))
这种方法怎么样(Office 365):
=LET(range,B$1:B$9,
s,IFERROR(TRANSPOSE(INDEX(range,ROW()+SEQUENCE(5,,-2))),1),
t,TEXTJOIN("",,(s=INDEX(range,ROW()))*ISEVEN(s)),
IFERROR(SEARCH("0110",t)<4,IFERROR(SEARCH("010",t)=2,FALSE)))
它创建一个包含 5 个值的数组
s
,起始点是范围的当前行,添加上面和下面的 2 个值。如果该值超出范围,它将用 1
替换错误。
检查数组
s
是否为偶数(TRUE/FALSE、IFERROR 创建的值不均匀)以及值是否等于范围中当前行的值 (TRUE/FALSE)。
这两个布尔值相乘,当两个值为 TRUE 时创建 1,否则创建 0。
将这些值连接起来并检查是否在范围的第二个或第三个位置中找到 2 个连续的 1(被 0 包围)(如果找到两个偶数连续相等的数字,就会出现这种情况), 如果出错,它将查看是否找到唯一的偶数(1 在第二位置被 0 包围)。
PS 我无法测试条件格式是否允许您将范围输入为
B:B
而不是 B$1:B$9
(在移动设备上工作),但这会使其更加动态,因为这样您可以轻松扩展条件范围。