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:
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?
źródło
SMALL
funkcja może zwrócić błąd, ponieważRANDBETWEEN
może zwrócić liczbę większą niż liczba liczb w MyPicksOdpowiedzi:
Co powiesz na tę małą piękność:
Dlatego cała twoja formuła byłaby:
EDYCJA: Jak wskazał Barry Houdini,
SMALL
funkcja zwróci tylko wartości liczbowe. W takim przypadkuSUM(FREQUENCY())
rozwiązaniem jest przesada. Zamiast tego po prostu użyjźródło
=SUM(FREQUENCY(MyPicks,MyPicks))
tylko podaje liczbę liczb w MyPicks - możesz uzyskać ten sam wynik, używając=COUNT(MyPicks)
COUNT
liczy 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.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:
źródło