
Kann mir jemand die Excel-Formel nennen, um den vorletzten Textwert in einer Zeile zurückzugeben?
Ich habe diese Formel für den letzten Textwert gefunden:, =INDEX(U2:Y2,MATCH(REPT("z",255),U2:Y2))
bin mir aber nicht sicher, wie ich den vorletzten Wert erhalte?
Antwort1
DIE FORMEL
Hier ist eine alternative Methode zur Rückgabe derNte Textwert vom Ende.
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-COLUMN(U2)+1),"")
Diese Formel muss als Matrixformel mit Ctrl+ Shift+ Enterund nicht nur mit eingegeben werden Enter. Sie wissen, dass Sie es richtig gemacht haben, wenn an beiden Enden geschweifte Klammern { } erscheinen.
WIE ES FUNKTIONIERT
=IFERROR(...,"")
gibt leer zurück, wenn der Rest der Formel ein Fehler ist. Sie erhalten einen Fehler `#VALUE!#, wenn nicht mindestensNTextwerte im Bereich.
INDEX(U2:Y2,...)
nimmt das Array auf und gibt einen Wert innerhalb von zurück. INDEX(U2:Y2,4)
würde das vierte Element im Array zurückgeben, das in diesem Fall das ist, was in steht X2
.
LARGE(..,2)
nimmt ein Array auf und gibt den zweitgrößten Wert aus diesem Array zurück. Ändern Sie den Wert 2
in eine beliebige andere Zahl, um den Wert zu erhalten.Ngrößtes Element. Die SMALL
Funktion ist ähnlich, gibt aber dasNthkleinsteWert stattdessen.
ISTEXT(U2:Y2)*COLUMN(U2:Y2)
ist der Teil, der Sie dazu veranlasst, es als Arrayformel einzugeben. Die ISTEXT
Funktion gibt ein Array von TRUE
/ FALSE
Werten zurück, die angeben, ob jede Zelle einen Textwert enthält. Dies könnte beispielsweise sein {TRUE,TRUE,FALSE,FALSE,TRUE}
. Die COLUMN
Funktion gibt die Spaltennummer zurück. In diesem Fall wäre dies {21,22,23,24,25}
. Diese beiden werden multipliziert ( TRUE=1
, FALSE=0
). In meinem Beispiel wäre das endgültige Array {21,22,0,0,25}
. Wenn Sie dies in die Formel von vorhin einsetzen, LARGE
würden Sie zurückgeben 22
, da dies der zweitgrößte Wert ist.
-COLUMN(U2)+1
Passen Sie einfach den in die Formel eingesetzten Wert an, INDEX
um der Tatsache Rechnung zu tragen, dass wir in Spalte 22 beginnen, das Array aber nur 5 Spalten hat. Wir möchten einen Wert zwischen und U2:Y2
zurückgeben , nicht zwischen und .1
5
21
25
BEISPIEL
Nehmen wir an, Sie hätten die folgenden Daten im Bereich U2:Y2
:
Hello | World | meep | 5 | boop
Der vorletzte Textwert lautet meep
also: Sehen wir uns an, wie die Formel funktioniert. Ich werde die Berechnungen Schritt für Schritt ausfüllen. Sie können einen ähnlichen Durchlauf davon sehen, indem Sie „Formel auswerten“ auf der Registerkarte „Formeln“ verwenden, obwohl die Reihenfolge möglicherweise nicht dieselbe ist.
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-COLUMN(U2)+1),"")
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-21+1),"")
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-20),"")
=IFERROR(INDEX(U2:Y2,LARGE({TRUE,TRUE,TRUE,FALSE,TRUE}*COLUMN(U2:Y2),2)-21),"")
=IFERROR(INDEX(U2:Y2,LARGE({TRUE,TRUE,TRUE,FALSE,TRUE}*{21,22,23,24,25},2)-21),"")
=IFERROR(INDEX(U2:Y2,LARGE({21,22,23,0,25},2)-21),"")
=IFERROR(INDEX(U2:Y2,23-21),"")
=IFERROR(INDEX(U2:Y2,2),"")
=IFERROR(INDEX({"Hello","World","meep",5,"boop"},2),"")
=IFERROR("meep","")
="meep"
Antwort2
Ich vermute, dass Ihre Methodik nicht die effizienteste ist... aber mit dem, was Sie bereits erreicht haben, könnten Sie Ihre vorhandenen nutzen MATCH
,subtrahiere einsum Ihnen die neue Suchgrenze zu geben und den letzten Text aus diesem neuen Bereich zurückzugeben. Mit dieser OFFSET
Methode können Sie den Suchbereich mit Ihrer neuen Grenze wie folgt neu definieren:
=INDEX(U2:Y2,MATCH(REPT("z",255),OFFSET(U2,0,0,1,MATCH(REPT("z",255),U2:Y2)-1)))
Antwort3
=INDEX(D7:P7,MATCH(REPT("z",255),D7:P7)-1)