2017-08-13 70 views
7

Szukam kryterium do użycia w =countif(range_of_formulas, [criterion]), które wskaże niepuste wyniki formuł. Znalazłem sporo tych, jak "<>", "<>"&"", "<>""", ">""", "*" i więcej (na przykład na SO here i here). Ale każde kryterium wydaje się działać tylko w niektórych sytuacjach, a nie innych, a oni wszystko nie w następującej sytuacji:COUNTIF nie może liczyć niepustych wyników formuły?

enter image description here kolumny A i B mają swoje oryginalne dane. Kolumna D przedstawia wyniki formuł, które widzisz w kolumnie C. Kolumna F pokazuje wyniki countif przy użyciu różnych kryteriów (jak pokazano w kolumnie E), aby zliczyć niepuste wyniki w kolumnie D. Żadna z nich nie weszła poprawnie - 5

W moich badaniach (i odpowiedziach na to pytanie, zanim zredagowałem, aby je zawęzić), widziałem wiele obejść, które miałyby odpowiednią wartość. Ale pytam, czy istnieje kryterium, które zadziałałoby w countif, czy też jeśli countifnie może wiarygodnie policzyć niepustych wyników formuły?
(a może ktoś może powiedzieć, pod jakimi warunkami może lub nie może być używany).

+1

Czy chcesz użyć 'COUNTIF' dwa razy? '= COUNTIF ($ D 1: $ D 8 $," <> "" ") - COUNTIF ($ D 1: $ D 8 $," ")' – ian0411

+0

Domyślam się, że ma on tylko 'countif's, ale wciąż jest rozwiązaniem. ... z dotychczasowych odpowiedzi doszedłem do wniosku, że nie ma prostego sposobu na to, aby 'countif' to zliczyć ... w prostym znaczeniu mam na myśli' = COUNTIF ($ D $ 1: $ D $ 8, "[ non - ""] ")'. Jeśli ktoś wie, że to niemożliwe, to też jest odpowiedź. –

+0

Naprawdę znalazłeś świetne pytanie. Próbowałem przez wiele godzin, ale nie mogłem tego zrobić, aby działał w ramach instrukcji 'LICZ.JEŻELI'. To jest po prostu dziwne, że otrzymujesz 3 z 'COUNTIF ($ D $: $ D $ 8," ")', ale nie możesz uzyskać 5 przez '= COUNTIF ($ D $ 1: $ D $ 8," <> "" ")" . Ktoś w MS powinien naprawić ten błąd ... haha. – ian0411

Odpowiedz

5

Można to osiągnąć za pomocą prostej zmiany na pierwszym forum, aby wymusić wartość wyjściową o wartości ciągu: (Jeśli musisz wykonać obliczenia z wynikami liczbowymi, pomnóż je przez 1, aby przekonwertować z powrotem na liczbę, gdy są używane)

ja po prostu dołączył pusty łańcuch na końcu wyniku z pierwszego wzoru i owinął je w nawiasach zachować Excel szczęśliwa:

=(IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"")&"")

teraz możesz korzystać z symboli wieloznacznych dla każdego znak (?) i dowolna długość ciągu (*) razem jako kryteria aby osiągnąć pożądany łącznie 5:

=COUNTIF($D$1:$D$8,"?*")

enter image description here

1

To powinno działać:

=(COUNTA(range) - COUNTBLANK(range)) 

COUNTA - zlicza wszystkie komórki z zawartością

LICZ.PUSTE - zlicza wszystkie komórki oceny jako puste

Ale uważaj na komórce bez treści, będą one zwiększyć LICZ.PUSTE ale nie COUNTA, wykolejając obliczenia.

1

przykład LICZ.WARUNKI,

=COUNTIFS(A1:A8, "<>", B1:B8, 1) 

Innym przykładem SUMPRODUCT,

=sumproduct(sign(len(d1:d10))) 
+0

Widzę, co masz na myśli na przykładzie 'countifs', myślę, że działałoby to w przykładzie, który napisałem powyżej, ale nie mogę tego zaimplementować w mojej prawdziwej sytuacji, ponieważ formuły są zapisywane dynamicznie jako część procesu VBA, więc Mogę tylko odnieść 'countifs' do wyniku tych formuł. Innymi słowy, odnosząc się do powyższego przykładu - potrzebowałbym "countifs" w tym przykładzie, aby odnieść się do kolumny ** D tylko ** –

+0

Jeśli formuły w d1: d8 są napisane przy użyciu VBA, wówczas należy użyć .range ("d1: d8 ") = .range (" d1: d8 "). wartość2 natychmiast po zapisaniu formuł na d1: d8. Spowoduje to przekształcenie ciągów o zerowej długości w prawdziwe puste komórki. – Jeeped

+0

Cóż, potrzebuję tych formuł, aby pozostać dynamicznym - kod buduje szablon, który zostanie wypełniony dopiero później ... –

4

Nie, to nie jest możliwe. COUNTIF analizuje warunek za pomocą interpretacji, która różni się od porównań w zwykłych formułach programu Excel.

wewnątrz cudzysłowów, operator porównania na początku może być analizowany: =,>,> =, = <, <, <>

Po tym, wszystko jest albo liczbą lub ciągiem. Wszystko, czego nie można przeanalizować jako liczby, zostanie przetworzone jako ciąg znaków. Porównanie jest następnie wykonywane na podstawie liczby lub ciągu znaków.

Porównywanie liczb Ignoruj ​​ciągi i porównania ciągów ignoruj ​​liczby.

"> 3" policzy wszystkie liczby większe niż 3. Zignoruje wszystkie ciągi.

"" c "policzy wszystkie ciągi większe niż c (to znaczy, wszystko począwszy od litery c, po której następuje inna litera lub cokolwiek, począwszy od wyższego kodu znaku). Ignoruje wszystkie liczby.

"> 3 *" policzy wszystkie ciągi większe niż znak 3.

Kiedy próbujesz zrobić ">" "", symbol "" jest używany do wskazania "znaku" (ponieważ jest w podwójnym cudzysłowie w formule), więc porównanie, które tutaj faktycznie robisz, jest: Wszystko większe niż charakter. Podciągnij wykres Unicode, a zobaczysz to tylko! jest mniejszy niż ". Jeśli więc umieścisz !, a następnie cokolwiek lub" samodzielnie, jeśli twoje dane, dostaniesz jedno mniej liczyć.

Podobnie, ">" "" "" "po prostu porównuje się do ciągu składającego się z dwóch podwójnych cudzysłowów, a nie z pustego łańcucha.

Nie można przekazać łańcucha zerowego do funkcji LICZ.JEŻELI.

Musisz innego rozwiązania, albo:

  1. Zmiana wcześniej IF wrócić dowolną wartość inną niż nullstring, które mogą być badane w sprawozdaniu LICZ.JEŻELI. Można nawet użyć CHAR(1) aby wyświetlić Niedrukowalny postać, która pojawia się pusty, ale nadal można wykluczyć w LICZ.JEŻELI: =COUNTIF(D1:D8,"<>"&CHAR(1))

  2. Używaj wielu LICZ.WARUNKI że policzyć liczbę strun i liczbę cyfr: =COUNTIF(D1:D8,"?*")+COUNTIF(D1:D8,">0") (> 0 stosowany jest przy założeniu, że są tylko pozytywne numery, w przeciwnym razie trzeba dodać także w liczbie numerów, które są < = 0)

  3. korzystać z innych funkcji, jak sugerowano przez innych użytkowników

+0

Tak - problem jest nierozerwalnie związany z kryterium łańcuchowym, które łączy operator relacyjny z wartością kryteriów: moja własna wersja algorytmu ACUNTIFIFS COUNTIFS radzi sobie z tym problemem, dopuszczając specjalne kryteria typów danych: #EMPTY, #N, #TXT itd. I mając specjalne procedury postępowania z typami danych. –

1

To zależy od tego, jak napisać formułę.

Zmiana formuły If(), jak poniżej i użycie Countif, jak wspomniano, da prawidłową odpowiedź.

=IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"|^|") 

=COUNTIF(C1:C8,"<>|^|") 

Albo

Jeśli nie można zmienić Jeśli() Wzór potem trzeba zmienić LICZ.JEŻELI(), aby SUMPRODUCT() dla uzyskania odpowiednich wyników.

=IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"") 

=SUMPRODUCT(--(TRIM($C$1:$C$8)<>"")) 
4

Jak już stwierdzono, nie bezpośrednio bez pomocy.Więc;

Prawdopodobnie najprostszym sposobem, aby dostosować ten może być:

=SUM(COUNTIF($D$1:$D$8,{">0",""})) 

Albo

=SUM(COUNTIFS($D$1:$D$8,{">0",""})) 

Które doda odpowiednio & daje swój wynik. Zwróć uwagę na różnicę między sposobem użycia tego COUNTIFS w porównaniu do twojego & umieszczenia {}.

wywierać od: https://exceljet.net/formula/countifs-with-multiple-criteria-and-or-logic

Aby policzyć na podstawie wielu kryteriów, za pomocą LUB logika, można użyć funkcji LICZ.WARUNKI ze stałą tablicową. Domyślnie funkcja LICZ.JEŻELI ma zastosowanie ORAZ logika. Gdy dostarczasz wiele warunków, wszystkie warunki muszą być zgodne, aby wygenerować liczbę. Jednym z rozwiązań jest dostarczanie wielu kryteriów w stałej tablicy ...