3 votes

Compter les cellules d'une plage nommée sans VBA

J'ai un ensemble disjoint de 9 cellules : A1,B3,C5,D7,E11,F13,G17,H19,I23 . J'ai attribué un Nom à ces cellules : MyPicks

J'ai une formule simple pour choisir la valeur de l'une de ces cellules au hasard :

=SMALL(MyPicks,RANDBETWEEN(1,9))

la formule fonctionne :

enter image description here

Cependant, à chaque fois que je modifie le nombre de cellules dans le fichier Gamme nommée je dois revenir en arrière et changer le 9 dans la formule ! J'ai donc décidé de "réparer" la formule :

Premier essai :

=SMALL(MyPicks,RANDBETWEEN(1,COUNTA(MyPicks)))

Cela a semblé fonctionner. Cependant, COUNTA() ne compte que les cellules avec des valeurs ou des Nulls. Il ignore les cellules totalement vides. So...........

Deuxième essai :

=SMALL(MyPicks,RANDBETWEEN(1,COUNTA(MyPicks)+COUNTBLANK(MyPicks)))

Malheureusement, cela produit une erreur #VALUE ! car COUNTBLANK() ne fonctionne pas sur des plages disjointes. Donc............

Troisième essai :

J'ai créé un petit UDF en VBA :

Public Function nCount(r As Range) As Long
    nCount = r.Count
End Function

L'utilisation de cet UDF a résolu le problème. J'ai alors découvert que mon client était macrophobe et la solution a été instantanément rejetée.

Est-il possible de compter le nombre total de cellules dans une Gamme nommée sans VBA ?

2voto

Engineer Toast Points 4317

Que dites-vous de cette petite beauté :

=SUM(FREQUENCY(MyPicks,MyPicks))

Par conséquent, votre formule complète serait :

=SMALL(MyPicks,RANDBETWEEN(1,SUM(FREQUENCY(MyPicks,MyPicks))))

EDITです。 Comme l'a fait remarquer Barry Houdini. SMALL ne renvoie que des valeurs numériques. Dans ce cas, la fonction SUM(FREQUENCY()) est exagérée. Au lieu de cela, utilisez simplement

=SMALL(MyPicks,RANDBETWEEN(1,COUNT(MyPicks)))

1voto

Ron Rosenfeld Points 7038

Si chacune des plages disjointes est composée d'une seule cellule, la formule suivante renverra le nombre de cellules de la plage, quel que soit le contenu, ou même si elles sont vides, ce qui, je pense, est ce que vous voulez :

=LEN(CELL("address",MyPicks))-LEN(SUBSTITUTE(CELL("address",MyPicks),",",""))+1

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X