2016-08-26 7 views
0

Ich habe Daten wie folgt in Zellen A1: F4.Excel Durchschnitt mit fehlenden Werten

Quarter | FY15Q4 | FY16Q1 | FY16Q2 | FY16Q3 | FY16Q4 

Company A | 0.34% | 0.48% | 0.55% | 0.68% | ------ 

Company B 0.32%  0.36%  0.34%  0.35%  0.35% 

Company C | 1.18% |------  |-----  |-----  |  

Ich versuche, den Durchschnitt des letzten nicht-fehlenden Wertes von den letzten 4 Spalten in jeder Zeile zu finden. Also für:

  • FY15Q4 ich den Durchschnitt von 0,34% wollen, 0,32% und 1,18%

  • FY16Q1, möchte ich den Durchschnitt von 0,48%, 0,36% und 1,18%

  • FY16Q2, mag ich den Durchschnitt von 0,55%, 0,34% und 1,18%

  • FY16Q3 ich den Durchschnitt von 0,68% will, 0,35% und 1,18%

  • FY16Q4, mag ich den Durchschnitt von 0,68% und 0,33% (Unternehmen C keine Daten für das letzte 4QS ​​hat, so ist es aus der Berechnung der durchschnittlichen ignoriert werden)

Die folgende Matrixformel Werke wie ich für FY16Q3 wollen ...

{=AVERAGE(IF(COUNT(B2:E2)=0,"",INDIRECT(ADDRESS(ROW(B2:E2),MAX((B2:E2<>"")*COLUMN(B2:E2))))),IF(COUNT(B3:E3)=0,"",INDIRECT(ADDRESS(ROW(B3:E3),MAX((B3:E3<>"")*COLUMN(B3:E3))))),IF(COUNT(B4:E4)=0,"",INDIRECT(ADDRESS(ROW(B4:E4),MAX((B4:E4<>"")*COLUMN(B4:E4))))))} 

Aber für FY16Q4, die gleiche Formel Struktur ...

=AVERAGE(IF(COUNT(C2:F2)=0,"",INDIRECT(ADDRESS(ROW(C2:F2),MAX((C2:F2<>"")*COLUMN(C2:F2))))),IF(COUNT(C3:F3)=0,"",INDIRECT(ADDRESS(ROW(C3:F3),MAX((C3:F3<>"")*COLUMN(C3:F3))))),IF(COUNT(C4:F4)=0,"",INDIRECT(ADDRESS(ROW(C4:F4),MAX((C4:F4<>"")*COLUMN(C4:F4)))))) 

gibt den #VALUE Fehlerwert.

Es scheint, dass die AVERAGE-Funktion, die normalerweise gut mit leeren Zellen ("") - Werten zurechtkommt, wegen der zusätzlichen Komplexität der Array-Formel kämpft.

Irgendwelche Vorschläge, wie ich das schaffen kann, ohne entweder (i) find-and-replace zu verwenden, um "" durch eine wirklich leere Zelle zu ersetzen; oder (ii) Verwendung von VBA?
Sicherlich muss es eine Möglichkeit geben, dies mit nur Formeln arbeiten zu lassen ...

+1

Können Sie die Beispieldaten für FY16Q4 korrigieren? Aus Ihrer Beschreibung scheint es, dass es 0,33% sein sollte, nicht 0,35%. [Bearbeiten] Sind diese '------- Zellen wirklich leer oder haben sie tatsächlich' -----? – Jeeped

+1

Meine Frage wäre, ob die Anzahl der Unternehmen in Wirklichkeit nur 3 ist (wie in Ihrem Beispiel) oder ob irgendeine Lösung erweiterbar sein muss, um für eine beliebige Anzahl von Compines zu arbeiten. –

+0

@Jeeped - das sind wirklich leer; Ja, Sie haben Recht - mein Tippfehler. – Jesse

Antwort

0

Eine Methode ohne Array-Formeln ist die Verwendung von Helferzellen. Ich richte eine weitere Tabelle mit den gleichen Spalten-/Zeilenköpfen ein.

Dann in der ersten Zelle Ich habe:

=IFERROR(INDEX($A:$F,MATCH($A12,$A:$A,0),IF(MATCH(1E+99,INDEX($A:$F,MATCH($A12,$A:$A,0),1):INDEX($A:$F,MATCH($A12,$A:$A,0),MATCH(B$11,$1:$1,0)))<=MATCH(B$11,$1:$1,0)-4,NA(),MIN(MATCH(1E+99,INDEX($A:$F,MATCH($A12,$A:$A,0),1):INDEX($A:$F,MATCH($A12,$A:$A,0),MATCH(B$11,$1:$1,0))),MATCH(B$11,$1:$1,0)))),"") 

es Ziehen Sie dann auf und ab mit der richtigen Nummer in der Tabelle zu füllen:

enter image description here

Dann ist es nur eine einfache AVERAGE() Formel:

=AVERAGE(B12:B14) 

Welche, wenn über gezogen wird ign Erz die leeren Zellen.

enter image description here

Einige Einsprüche von @Jeeped und @XOR LX löschte.

  1. Dies funktioniert nur, wenn die „Blank“ sind NICHT0 als etwas anderes formatiert.
  2. Wenn Unternehmen und Quartale hinzugefügt werden, müssen in der Referenztabelle die gleichen Spalten und Zeilen hinzugefügt werden.
+0

danke für den Vorschlag; Vielleicht muss ich das so machen. Aber ehrlich gesagt hatte ich wirklich gehofft, dass ich das tun könnte, ohne zusätzliche Zellen und Formeln hinzuzufügen, die beibehalten werden müssten. – Jesse

+0

@Jesse, um es in einer Formel zu bekommen, würde es VBA in einer UDF erfordern. –

+0

danke. Ich fühle mich wenigstens nicht schlecht, dass ich das selbst nicht herausfinden konnte. – Jesse

Verwandte Themen