2

我正在尝试在 Excel (2010) 中使用带有公式的 CountIf 作为标准。像这样的东西:

=CountIf(rawdata!$AK:$AK;bitAnd(rawdata!$AK:$AK;F$3))

BitAnd是一个用户定义的 VBA 函数,用于按位与运算:

Public Function bitAnd(a As Integer, b As Integer) As Integer
bitAnd = a And b
End Function

任务是计算所有设置了某个位标志的行。例如,我想计算所有 LSB 设置为 1 的行(例如 0001、0101、...)。也就是说,做这样的事情(在伪代码中):

IF bitAnd(1;any number in the range) == 1 THEN count

显然这不适用于 CountIf,但是是否有任何其他使用公式的优雅解决方案(而不是在 VBA 中编写自定义函数)?有什么建议么?

4

1 回答 1

1

使用类似的东西

=SUMPRODUCT(MOD(INT(($A3:$A19)/F$2),2)*1)

这里,$A3:$A19是要测试的源范围,F2 是=2^(F$1-1),F1 是要提取的位的顺序(1 是 LSB 等)。当然,你可以写一个直接的公式=SUMPRODUCT(MOD(INT(($A3:$A19)/2^(F$1-1),2))*1)。您应该根据需要调整绝对/相对索引,以便能够方便地复制和粘贴(就像我为测试公式所做的那样)。

请注意,这对于提取单个位很有用,正如您所要求的。可以在此基础上构造一个“完整的”按位与(尽管可能有更好的选择)。

对于Excel 2013的特定情况(截至目前,不是您的目标),使用BITAND工作表函数以及COUNTIFSUMPRODUCT应该让您走上正轨,在这里您有一个“完整的”按位 AND 可用(我没有 Excel 2013 来测试这个)。

于 2013-12-12T13:20:10.457 回答