Wenn Sie am Anfang der Daten eine beliebige Anzahl von Rücksetzungen zulassen möchten und keine Hilfsspalten verwenden möchten, lautet die Formel a wenig kompliziert:

Geben Sie die folgende Formel ein C1 und Strg-Eingabe / Kopieren / Einfügen / Ausfüllen / automatisches Ausfüllen in den Rest der Tabellenspalte:
=
INDEX(
(B:B),
IFERROR(
1/(1/SUMPRODUCT(LARGE(ROW(A$1:A1)*(A$1:A1<>"res"),1))),
ROW()-1+MATCH("tmp",A1:INDEX(A:A,ROWS(A:A)),0)
)
)
Erläuterung:
Das LARGE(ROW(A$1:A1)*(A$1:A1<>"res"),1) Funktion wird verwendet, um die größte Zeilennummer (d. h. am nächsten) res Reihe, von der aktuellen Reihe aufwärts. (Das SUMPRODUCT() Einkapseln ist nur da, um sicherzustellen, dass die Bereiche als Arrays ausgewertet werden, ohne dass die Formel in das Array eingegeben werden muss Nein solche nicht res Reihen, SUMPRODUCT(LARGE(…)) bewertet zu 0.
Für eine Nicht-Null Wert . IFERROR(1/(1/ Wert ) Ausdruck ) bewertet zu Wert (d. h. der nächstgelegene res Zeilennummer). Für eine Null Wert wird das Ergebnis von bewertet Ausdruck (schon seit 1/(1/0)) führt zu einem #DIV/0! Error).
Für jeden aufeinanderfolgenden Rücksetzwert, der von der ersten Zeile aus beginnt, ROW()-1+MATCH("tmp",A1:INDEX(A:A,ROWS(A:A)),0) ausgewertet wird. Dies gibt einfach die Zeilennummer der ersten Reihe von der aktuellen Reihe nach unten zurück, dh einen gültigen Temperaturwert. ( A1:INDEX(A:A,ROWS(A:A)) ist einfach der Bereich von der Zelle in der Spalte A entsprechend der aktuellen Zeile, d.h. A1 für die in eingegebene Formel C1bis zur letzten Zelle der Spalte A. INDEX(A:A,ROWS(A:A)).)
Zum Schluss enden wir mit INDEX((B:B), Zeilennummer ) die extrahiert die entsprechende Temperaturanzeige.
Durch die Formel gehen C10 sollte das oben klarer machen:
ROW(A$1:A10)*(A$1:A10<>"res")
→ {1;2;3;4;5;6;7;8;9;10}*({"res";"res";"tmp";"tmp";"res";"tmp";"tmp";"tmp";"res";"res"}<>"res")
→ {1;2;3;4;5;6;7;8;9;10}*{FALSE;FALSE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE}
→ {1;2;3;4;5;6;7;8;9;10}*{0;0;1;1;0;1;1;1;0;0}
→ {0;0;3;4;0;6;7;8;0;0}
1/(1/SUMPRODUCT(LARGE({0;0;3;4;0;6;7;8;0;0},1)))
→ 1/(1/SUMPRODUCT(8)) (schon seit LARGE() gibt den n-ten größten Wert zurück, wobei n das zweite Argument ist)
→ 1/(1/8)
→ 1/0.125
→ 8
=INDEX((B:B),IFERROR(8,…))
→ =INDEX(B:B,8)
→ =20,2
Anmerkungen:
- Die mehrzeilige, festgelegte Formel funktioniert tatsächlich so, wie sie ist.
- Die Klammern herum
(B:B) sind nur erforderlich, um das zu erzwingen B:B auf seiner eigenen Linie bleiben.
Wenn Sie eine einfachere Formel wünschen, müssen Sie eine Helper-Spalte verwenden ( D ):

Geben Sie die folgende Formel ein C1 und Strg-Eingabe / Kopieren / Einfügen / Ausfüllen / automatisches Ausfüllen in den Rest der Tabellenspalte:
=IF(A1="res",IF(ROW()=1,D1,INDEX(C:C,ROW()-1)),B1)
Geben Sie die folgende Formel ein D1 und Strg-Eingabe / Kopieren / Einfügen / Ausfüllen / automatisches Ausfüllen in den Rest der Tabellenspalte:
=IF(A1="res",D2,B1)
Erläuterung:
Helfersäule:
- Wenn die aktuelle Zeile einen Rücksetzwert enthält, wird die Formel in Spalte angezeigt
D kopiert den Wert aus der Zelle direkt darunter.
- Andernfalls wird der Wert aus derselben Spaltenzeile abgerufen
B.
- Ab der letzten Datenzeile in der Spalte aufwärts führt dies zu
D1 Auswertung bis zum ersten gültigen Wert in der Spalte B.
Hauptsäule:
- Für eine Reset-Zeile die Formel in Spalte
C prüft, ob es sich in der ersten Zeile befindet, und verwendet in diesem Fall den Wert aus der Zelle der Spalte D entsprechend derselben Reihe, d.h. D1. Wenn sich die Formel in einer anderen Spalte befindet Cholt sich den Wert aus der Zelle direkt darüber.
- Wenn es sich bei der Zeile um eine gültige Temperaturzeile handelt, entnimmt die Formel den Temperaturwert aus der Zelle in der Spalte
B entsprechend derselben Zeile.
=IF(RC[-1]=0,R[-1]C,RC[-1])in das obere Cn, wo Bn nicht Null ist. Runterziehen. Einfügen=R[1]Cin Cm über Cn. Nach oben ziehen