2010-07-16 5 views
1

J'ai une grille quelque chose comme ceci:Tableau de bits ET dans Excel?

A A A A A 
B C C C C C 
B C C C C C 
B C C C C C 
B C C C C C 
B C C C C C 

Chaque A et B sont des valeurs numériques dérivées de la création d'un tableau de bits d'un autre travail en cours ailleurs dans les feuilles de calcul.

En C, je dois effectuer une opération de bits et sur les intersection A et B et tester si le résultat est supérieur à zéro (à savoir, il y a au moins une valeur de bit correspondant de « 1 »).

Ce doit être être une pure formule Excel, ne peut pas utiliser de macros - il est utilisé dans un format conditionnel. L'utilisation de macros pour simuler la mise en forme conditionnelle n'est pas une option, pas plus que la création d'une table qui duplique C et utilise une macro pour stocker la réponse que la mise en forme conditionnelle peut regarder.

Les valeurs de A et B peuvent être stockées sous la forme d'une chaîne avec des valeurs de 1 et de 0 si un peu de magie de chaîne est plus facile à exécuter.

Des idées?

modifier

La réponse acceptée me donne ce que je dois, mais pour la postérité, voici comment l'étendre à étendre cette solution à donner des réponses au niveau du bit de retour:

AND = SUBSTITUTE(SUBSTITUTE(TEXT(VALUE($A2)+VALUE(B$1),"1","0"),"2","1") 
OR = SUBSTITUTE(TEXT(VALUE($A2)+VALUE(B$1),"2","1") 
XOR = SUBSTITUTE(TEXT(VALUE($A2)+VALUE(B$1),"2","0") 
+0

est le nombre de bits fixé? – mvds

+0

Le nombre de bits dans A et B est le même, mais pas fixe. Va de 1 à ~ 30, en fonction de la feuille de calcul (la feuille est générée sur le serveur et le nombre de bits varie d'une exportation à l'autre). – richardtallent

+0

Je suis juste curieux de savoir pourquoi pas de VBA ici. Est-ce juste une chose de vitesse? Vous pouvez certainement écrire une fonction VBA et l'appeler à partir d'une règle de format conditionnel. – jtolle

Répondre

2

l'enregistrer comme une chaîne de 0 et 1, les ajouter sous forme de nombres ensemble, convertir en chaîne et rechercher un 2.

=ISNUMBER(SEARCH("2",TEXT(VALUE($A2)+VALUE(B$1),"0"))) 

copie dans la cellule B2 avec des données dans A2 et B1, puis copiez & coller autour.

éditer: Wow! ils ont mis dans une fonction DEC2BIN()!

=ISNUMBER(SEARCH("2",TEXT(VALUE(DEC2BIN($A2))+VALUE(DEC2BIN(B$1)),"0"))) 

et de leur laisser des numéros.

+1

Élégant. Aimer. DEC2BIN() est uniquement disponible avec le complément Analysis ToolPak, mais le premier exemple fera l'affaire. Edité pour ajouter quelques détails pour l'implémentation des opérateurs booléens. – richardtallent

+0

Question suivante: Je m'attendrais à ce que FIND() soit plus rapide que SEARCH() car FIND() est sensible à la casse et n'a pas de support générique. Une raison particulière pour SEARCH()? En outre, FIND/SEARCH convertira implicitement la somme de A et B en une chaîne, donc pas besoin de TEXT(). – richardtallent

+0

J'ai un bureau de base MS installé sur un mac - rien de spécial. peut-être les nouvelles versions viennent avec dec2bin? comme pour trouver/chercher, on dirait que vous pourriez avoir raison. Mais dans Excel, quand la performance entre en jeu, fuyez! – mvds

0

Qu'en est-=(A + B) > 0 si vous faites OU (que vous décrivez) ou =(A + B) > 1 si vous faites ET (comme si vous étiez en train d'écrire).

+0

'2 & 1 == 0' c.'(2 + 1)> 0' –

+0

Bon point, je suppose que je pensais en pur binaire là –

Questions connexes