Zliczanie komórek w nazwanym zakresie bez VBA

3

Mam rozłączny zestaw 9 komórek: A1, B3, C5, D7, E11, F13, G17, H19, I23 . Przypisałem nazwę do tych komórek: MyPicks

Mam prostą formułę, aby losowo wybrać wartość w jednej z tych komórek:

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

formuła działa:

wprowadź opis zdjęcia tutaj

Jednak za każdym razem, gdy zmieniam liczbę komórek w zakresie nazwanym , muszę wracać i zmieniać 9 w formule! Postanowiłem więc „naprawić” formułę:

Pierwsza próba:

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

To wydawało się działać. Jednak COUNTA () liczy tylko komórki z wartościami lub wartościami NULL. Ignoruje całkowicie puste komórki. Więc...........

Druga próba:

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

Niestety powoduje to # WARTOŚĆ! błąd, ponieważ COUNTBLANK () nie działa w rozłącznych zakresach. Więc............

Trzecia próba:

Stworzyłem mały VBA UDF:

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

Korzystanie z tego UDF rozwiązało problem. Potem odkryłem, że mój klient jest makrofobiczny i rozwiązanie zostało natychmiast odrzucone.

Czy można policzyć całkowitą liczbę komórek w zakresie nazwanym bez VBA?

Uczeń Gary'ego
źródło
+1 Doskonałe pytanie. Powinniśmy znaleźć meta, aby wskazał na to jako przykład tego, co należy uwzględnić, aby konfiguracja danych, problem i poprzednie próby były dobrze zrozumiane.
Inżynier Toast
Pytanie, o którym myślałem, było właściwie twoje . Nevermind
Raystafarian,
Po co liczyć liczbę komórek ? Jeśli to zrobisz, SMALLfunkcja może zwrócić błąd, ponieważ RANDBETWEENmoże zwrócić liczbę większą niż liczba liczb w MyPicks
barry houdini
@barryhoudini OUCH .................. masz rację !! ............. Będę musiał wybrać z tabeli adresów zakresu nazwanego ................ Czy możesz zasugerować inne podejście?
Student Gary'ego
Nie jestem pewien, co masz na myśli - wartości tekstowe nie będą działać w tym kontekście, ponieważ SMALL obsługuje tylko liczby. Czy chcesz wybierać losowe wartości tekstowe z nieciągłego zakresu? To może być trudne ......
Barry Houdini

Odpowiedzi:

2

Co powiesz na tę małą piękność:

=SUM(FREQUENCY(MyPicks,MyPicks))

Dlatego cała twoja formuła byłaby:

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

EDYCJA: Jak wskazał Barry Houdini, SMALLfunkcja zwróci tylko wartości liczbowe. W takim przypadku SUM(FREQUENCY())rozwiązaniem jest przesada. Zamiast tego po prostu użyj

=SMALL(MyPicks,RANDBETWEEN(1,COUNT(MyPicks)))
Inżynier Toast
źródło
Dzięki! ................. zasmuca mnie to, że mogę głosować tylko raz!
Uczeń Gary'ego
Czy to naprawdę robi to, o co prosiłeś? Nie =SUM(FREQUENCY(MyPicks,MyPicks))tylko podaje liczbę liczb w MyPicks - możesz uzyskać ten sam wynik, używając=COUNT(MyPicks)
Barry Houdini
@barryhoudini COUNTliczy tylko liczby, które, biorąc pod uwagę dokładny przykład, spełniłyby potrzeby OP. Moje rozwiązanie działa z cyframi lub tekstem.
Inżynier Toast
Z pomocy programu Excel: CZĘSTOTLIWOŚĆ ignoruje puste komórki i tekst .....
Barry Houdini
1

Jeśli każdy z rozłącznych zakresów składa się z jednej komórki, poniższa formuła zwróci liczbę komórek w tym zakresie, bez względu na zawartość, a nawet jeśli są puste, co moim zdaniem jest tym, czego chcesz:

=LEN(CELL("address",MyPicks))-LEN(SUBSTITUTE(CELL("address",MyPicks),",",""))+1
Ron Rosenfeld
źródło
Działa to doskonale w zakresach, w których nie ma dwóch komórek mających wspólną granicę. Dzięki .................. puste komórki niszczą podejście polegające na użyciu COUTNA (), co jest niefortunne, ponieważ COUNTA () działa niezależnie od tego, czy zakres jest rozłączny czy „połączony”.
Gary's Student,
Może być możliwe zrobienie czegoś z „wspólnymi” komórkami, ale myślę, że łatwiej będzie wyleczyć twojego klienta z jego makrofobii :-)
Ron Rosenfeld
..........................Amen!
Student Gary'ego