2016-08-04 51 views
3

由於這些是交換和關聯運算符,我沒有理由將它們限制爲兩個參數。將Excel按位函數(BITAND或BITOR)應用於數值較大的範圍

我可以用我的非負Long值寫了2 以下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 - 1,我想應用到一系列的這種能力。

是否有一個簡單的方法讓這些位操作符在最大範圍內工作?

一對夫婦的解決方法我試過:

  1. 創建兩個新列,並使用MOD較大值分裂成兩個較小的,然後用每個那些我RangeBitOr功能,然後把數值回到一起。

  2. BITOR函數創建一個列,將運行中的聚合與當前值組合,並將最後一個作爲範圍的總計BITOR

理想情況下,我想有一個不需要幫助列或VBA的解決方案,但我願意接受任何有用的建議。

+0

您是否使用Excel的32位或64位版本? – Comintern

+0

64位Excel 2016 –

+0

它沒有64位安裝方便,但在單元格A1中輸入值9223372036854770000,並查看「Debug.Print TypeName(Range(」A1「)。Value)'返回的內容。 – Comintern

回答

2

如@Comintern評價所指出的,我的VBA功能可被擴展到至少所述BITOR極限的2 - 1(可能高達9,007,199,254,740,992 = 2 或更高)通過簡單地更換LongLongLong如下:

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的解決方案,我仍然有興趣。