worksheetfunction usar application excel excel-vba excel-formula worksheet-function

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:

  1. Creando dos columnas nuevas y usando MOD para dividir valores más grandes en dos más pequeños, luego usando mi función RangeBitOr en cada uno de ellos y luego volviendo a juntar los valores.

  2. Crear una columna para la función BITOR para combinar un agregado en ejecución con el valor actual y tomar el último como mi BITOR 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.