【问题标题】:CountIf in Excel with formula in criteriaExcel中的CountIf与标准中的公式
【发布时间】:2013-12-12 13:17:10
【问题描述】:

我正在尝试在 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 中编写自定义函数)?有什么建议吗?

【问题讨论】:

  • 在数据旁边的列中进行计算(标准)...将 countif 标准引用到这些单元格

标签: vba excel excel-2010 countif


【解决方案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 来测试它)。

【讨论】:

  • 嗨,这是一个不错的方法,我不知道。但是,它仅在只有一个 ONE 位标志设置为 1 时才有效。在我的情况下,也可能会发生多个位设置。这就是为什么我尝试使用按位与。您对如何处理有什么建议吗?
  • @user1707493 - 我不明白你的意思。我在区间 [0,17] 中的所有数字 n 上对此进行了测试(即,其中许多有多个位设置为 1),提取位 b #1 ,#2 或#3,它的工作原理。例如,n 和 0010b。如前所述,它不能计算 n 和 0110b,如果这就是你的意思的话。我会用谷歌搜索“excel bitwise and”之类的东西(我实际上是这样做的,尝试了几个我发现的选项,但都没有工作)。这可能值得另一个问题,因为它本身作为一个封闭的问题很有趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多