Like

Problem, który trafił się koledze. Nie chciał pokazać pliku źródłowego, więc musiałem sam zbadać na czym polega to, że ARRAYFORMULA – czyli funkcja przekształcająca zwykłe formuły w formuły tablicowe, nie chce działać zgodnie z przewidywaniami, gdy do środka zapakuje się funkcje OR, AND i im podobne (XOR). Znaczy się – nie generuje całej kolumny wyników.

Zobacz plik z przykładem.

Załóżmy, że używamy funkcji OR do wskazania liczb mniejszych od 10 lub większych od 50. Jak spełniają warunek to piszemy OK, a jak nie to WCALE NIE OK. Standardowo formuła tablicowa będzie wyglądać tak:

=ArrayFormula(if(or(A3:A<10;A3:A>50);"OK";"WCALE NIE OK"))

I nie zadziała dla całej kolumny A. Wyświetli tylko jedną wartość w pierwszej z komórek.

Jak sprawić by uzyskać porządany efekt (czyli obsłużenie całej kolumny)?

Musimy zastąpić funkcję logiczną działaniem.

Przypomnijmy sobie, że wartość TRUE (PRAWDA) odpowiada wartości 1, a wartość FALSE (FAŁSZ) odpowiada 0. I możemy je podstawiać do działań.

Jeśli wpiszemy w arkusz =TRUE+TRUE to uzyskamy wynik 2.

Jeśli wpiszemy w arkusz =(7<10)+(7>50) to uzyskamy wynik 1.

Podobnie możemy testować i dodawać np.

=(A2="BŁĄD")+(A2="")

I zapakować to w funkcję if, która powie co zrobić jeśli uzyskamy wartość 1 (w tym wypadku nie ma możliwośći uzyskania wartości 2, bo komórka A2 nie może być równoczesnie pusta i zawierać słowa błąd.

=if((A2="BŁĄD")+(A2="")=1;"zrób to co trzeba zrobić z pustymi lub błędnymi komórkami";"zrób co innego)

A teraz wystarczy, że wprowadzimy tu adresy i napiszemy

=ArrayFormula((A3:A<10)+(A3:A>50)) to uzyskamy ciąg wyników dodawania.

I możemy to też opakować w funkcję if.

W widocznym przykładzie zastąpiliśmy OR dodawaniem testów logicznych i uzyskaliśmy tabelę wyników w kolumnie G

Co zrobić z AND?

Tu działamy analogicznie tylko, że mnożymy warunki:

=true*true daje 1, ale

=true*false , =false*true ,=false*false dają 0

Dlaczego to trzeba obchodzić?

Dlatego, że połączenie ARRAYFORMULA i funkcji AND i OR sprawia, że sprawdzają one cały wskazany zakres.

Wpisanie =arrayformula(or(a3:a100>10)) sprawi, że przetestowany zostanie cały zakres A3:A100 i w tym wypadku jeśli pojawi się w tym zakresie choć jedna liczba większa od 10 to uzyskamy tylko wartość TRUE (PRAWDA) wpisaną w bieżącą komórkę.

Użycie połączenia Arrayformula i or sprawiło, że wykonane zostały testy, ale wynik jest tylko jeden. Wystarczyło, że w całej kolumnie A3:A znalazła się jakaś liczba która była mniejsza od 10 lub większa od 50 i cały test daje wynik TRUE (PRAWDA).

Jak zrobić ciąg 100 komórek liczb losowych od 1 do 100?

Użyłem funkcji RANDARRAY, która generuje tablicę liczb losowych o zadanej wielkości (wiersze;kolumny). Połączonej z ARRAYFORMULA, mnożeniem i wyciąganiem części całkowitej (żeby nie mieć ułamków).

=ArrayFormula(int(randarray(100;1)*100))

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.