Ich versuche, eine ZÄHLENWENN-Funktion für die folgenden Daten auszuführen, wobei das Kriterium zeilenspezifisch ist und nicht mit einem bestimmten Wert oder einer bestimmten Zelle verknüpft ist.
Im folgenden Beispiel versuche ich beispielsweise, die Zeilen zu zählen, in denen Spalte B das Doppelte von Spalte A beträgt.
A | B |
---|---|
1 | 5 |
2 | 6 |
5 | 3 |
Ich gehe davon aus, dass die korrekte Syntax "=ZÄHLENWENN(B:B, "="&A:A *2) ist, sodass geprüft wird, ob Spalte B in jeder Zeile doppelt so groß ist wie Spalte A, aber ich erhalte immer 0. Das korrekte Ergebnis wäre 2.
Anscheinend sind nur einzelne Nummern oder ein einzelner Zellverweis (z. B. „=&A2“) zulässig. Ich möchte jedoch, dass die zu prüfende Bedingung für jede Zeile spezifisch ist.
Gibt es eine andere Funktion oder Syntaxfehler, die mich daran hindern? Vielen Dank
Antwort1
Antwort2
Ihre Beispieldaten haben keine (Zeilen-)Instanzen, bei denen die Spalte B doppelt so hoch ist wie der Wert in A
=SUM(IF(B1:B3 =A1:A3*2,1,0))
da eine 3D-/Array-Formel dies für Sie erledigt.
Eine Matrixformel muss in LibreOffice mit CTRL+ SHIFT+ eingegeben werden ENTER; ich bin mir nicht ganz sicher, ob das in Excel genauso ist(und habe keine Möglichkeit, es zu versuchen).
Antwort3
Das einzige Problem mit der Originalformel ist, dass sie irgendwie summiert werden muss. Eine Möglichkeit ist, wie es gemacht wurde. Eine andere besteht darin, die Formel des Posters einfach in eine Funktion cybernetic.nomad
einzuschließen .SUM()
Es gibt andere Möglichkeiten, eine Liste von Einsen und Nullen zu erhalten, um festzustellen, ob die Werte in Spalte B die Bedingung erfüllen. Hannu
zeigt eine, die ehrlich gesagt meine erste Wahl gewesen wäre, da ich nie viel Verwendung für die COUNT
Funktionsfamilie gefunden habe. (Ich weiß, dass ich begrenzt bin, da ich in den letzten acht Jahren, in denen ich auf Excel-Hilfeseiten nachgesehen habe, viele „Off-Label“-Verwendungen gefunden habe und dass es direktere Wege gibt, um die Ergebnisse zu erzielen, die ich immer verwendet habe IF()
.)
Es gibt jedoch auch andere Möglichkeiten, dies zu tun. Eine davon ist ein einfacher WAHR/FALSCH-Test für jeden Wert, der IF()
bei der Berechnung nicht verwendet wird und daher bei einem großen Datensatz wahrscheinlich schneller wäre:
=SUM( (B1:B4 = A1:A4*2) *1)
Es ist nur der einfache Vergleich, der ein Array von WAHR/FALSCH-Ergebnissen erzeugt. Dann kann man die --
Operatoren verwenden, wie cybernetic.nomad
es tut, oder die, *1
wie ich es hier tue. Dies konvertiert die wörtlichen WAHR/FALSCH-Array-Elemente in 1/0-Array-Elemente, sodass SUM()
sie dann addiert werden können. (Ich bevorzuge die , *1
da es einfach ist, am Ende des Ausdrucks nicht zu addieren, wenn der Ausdruck seine eigene Multiplikation enthält, da diese Multiplikation (oder Addition, wenn eine OR
statt einer verwendet wird AND
) für die Konvertierung ausreicht. Natürlich funktioniert beides gut, und für viele --
scheint die klarer zu sein und würde es daher für SIE einfacher machen, es zu pflegen, als die *1
. Wir Menschen sind so und für jeden das Beste für ihn.)
Die COUNT
Familie produziert die 1/0 direkt, also ist das ein guter Wert. Allerdings muss man die Dinge noch etwas zusammenfassen, wenn man es so über einen Bereich anwendet.