usar - Aplicar la función de bit de Excel(BITÁN o BITOR) a un rango con valores grandes
worksheetfunction (1)
Como señala @Comintern en los comentarios, mi función VBA se puede extender hasta al menos el límite BITOR
de 2 48 - 1 (posiblemente hasta 9,007,199,254,740,992 = 2 53 o superior) simplemente reemplazando Long
por LongLong
siguiente manera:
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
Si alguien tiene una solución que no es de VBA, todavía estoy interesado.
Dado que estos son operadores conmutativos y asociativos, no veo ninguna razón por la cual deberían limitarse a dos argumentos.
Puedo usar la siguiente función VBA que escribí para valores Long
no negativos hasta 2 31 , pero se desbordará para algo más grande.
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
Las funciones BITAND
Excel BITAND
y BITOR
(presentadas en Excel 2013) pueden manejar valores hasta 2 48 - 1 y me gustaría que esta capacidad se aplique a un rango.
¿Hay una manera simple de hacer que estos operadores de bit funcionen en un rango hasta este límite?
Un par de soluciones que he intentado:
Creando dos columnas nuevas y usando
MOD
para dividir valores más grandes en dos más pequeños, luego usando mi funciónRangeBitOr
en cada uno de ellos y luego volviendo a juntar los valores.Crear una columna para la función
BITOR
para combinar un agregado en ejecución con el valor actual y tomar el último como miBITOR
total para el rango.
Idealmente, me gustaría tener una solución que no requiera columnas auxiliares o VBA, pero estoy abierto a cualquier sugerencia útil.