将Excel按位function(BITAND或BITOR)应用于具有较大值的范围

既然这些是交换性和联想性的操作符,我没有理由将它们限制在两个参数之中。

我可以使用我写的非负Long值高达2 31的以下VBA函数,但是对于任何更大的值,它都会溢出。

 Function RangeBitOr(rng As Range) As Long Dim i As Long Dim cell As Range i = 0 For Each cell In rng i = i Or CLng(cell.Value) Next cell RangeBitOr = i End Function 

Excel的内置函数BITANDBITOR (在Excel 2013中引入)可以处理值一直到2 48 – 1,我希望这个能力适用于一个范围。

是否有一个简单的方法让这些位操作员在这个范围内工作?

我尝试了几个解决方法:

  1. 创build两个新列,并使用MOD将较大的值拆分为两个较小的值,然后对每个列使用RangeBitOr函数,然后将这些值重新组合。

  2. BITOR函数创build一个列,将正在运行的聚合与当前值合并,并将最后一个作为范围的总BITOR

理想情况下,我想有一个不需要帮助列或VBA的解决scheme,但我愿意接受任何有用的build议。

正如@Comintern在评论中指出的那样,通过简单地用LongLongreplaceLong ,我的VBA函数可以扩展到至lessBITOR限制为2 48 – 1(可能高达9,007,199,254,740,992 = 2 53或更高),如下所示:

 Function RangeBitOr(rng As Range) As LongLong Dim i As LongLong Dim cell As Range i = 0 For Each cell In rng i = i Or CLngLng(cell.Value) Next cell RangeBitOr = i End Function 

如果有人有非VBA解决scheme,我仍然感兴趣。