Antwort1
Da die Datensätze paarweise zeilenweise gruppiert sind, wird dies genutzt, um die Werte zu identifizieren und zu vergleichen. Die Formel prüft, ob die erste Datenzeile eine gerade oder ungerade Zeile ist. In Zukunft wird dies verwendet, um alle Paare zu identifizieren.
odd; even,
odd; even,
odd; even,
usw.
oder
even; odd,
even; odd,
even; odd,
usw.
Formel
- Die Formel verwendet einen benannten Bereich,
data
um die Nachverfolgung und Wartung der Formel zu vereinfachen$A2:$C1000
- Aus der Frage ergibt sich die Grundannahme, dass zwei Mitglieder eines Paares niemals gleiche Werte haben werden oder dass sie, falls doch, nicht von Interesse sind. Falls doch, werden sie beide aus den Ergebnissen herausgefiltert, da
x-x=0
.
=LET(
rowOffset, IF(ISEVEN(ROW(INDEX(data,1,1))),0,1),
newValues,
MAP(INDEX(data,,3), LAMBDA(r,IF(r<>"",
IF(ISEVEN(ROW(r)+rowOffset),
IF(r>OFFSET(r,1,0),r-OFFSET(r,1,0),0),
IF(r>OFFSET(r,-1,0),r-OFFSET(r,-1,0),0)),0))),
newData, HSTACK(INDEX(data,,1), INDEX(data,,2), newValues),
FILTER(newData, INDEX(newData,,3)>0))
Anmerkungen
Line | Code
-----+------------------------------------------------
1 | =LET(
2 | rowOffset, IF(ISEVEN(ROW(INDEX(data,1,1))),0,1),
3 | newValues,
4 | MAP(INDEX(data,,3), LAMBDA(r,IF(r<>"",
5 | IF(ISEVEN(ROW(r)+rowOffset),
6 | IF(r>OFFSET(r,1,0),r-OFFSET(r,1,0),0),
7 | IF(r>OFFSET(r,-1,0),r-OFFSET(r,-1,0),0)),0))),
8 | newData, HSTACK(INDEX(data,,1), INDEX(data,,2), newValues),
9 | FILTER(newData, INDEX(newData,,3)>0))
Linie | Anmerkungen |
---|---|
#1 | Verwenden Sie dieLASSENFunktion zum Speichern von Zwischenberechnungen und Definieren von Namen in der Formel. |
#2 | rowOffset gleich 0 oder 1 DasLAMBDADie Formel (Zeile 4) geht davon aus, dass die Mitglieder des ersten Paars in geraden Zeilen stehen. rowOffset Verschiebt die Zeilennummer nach BedarfINDEXdient zur Identifizierung von Zeile 1 Spalte 1 des data BereichsINDEX(data,1,1) REIHEerhält die Zeilennummer der indizierten Zelle ROW(INDEX(data,1,1)) ISTSIEBENgibt TRUE zurück, wenn die Zeilennummer gerade ist ISEVEN(ROW(INDEX(data,1,1)) und schließlichWENNes ist gerade dann 0, oder 1 für ungerade IF(ISEVEN(ROW(INDEX(data,1,1))),0,1) |
#3 | Declare newValues zum Speichern des Ergebnisses derLAMBDAFunktion |
#4 | LAMBDAFunktion erstellt Wertespalte0oder der Unterschied zwischen einem Paar. INDEX wird verwendet, um die alten Werte aus data Spalte 3 zu erhalten. INDEX(data,,3) Die indizierten SpaltenKARTEin dieLAMBDAFunktion MAP(INDEX(data,,3), DieLAMBDAdefiniert r to hält Werte abgebildet inMAP(INDEX(data,,3), LAMBDA(r, WENNAnweisung überspringt den Rest derLAMBDAwenn der zugeordnete Wert leer ist IF(r<>"", |
#5 | Überprüfen Sie, ob r es sich um das erste oder zweite Mitglied des Paares handeltREIHEgibt uns r die Zeilennummer ROW(r) rowOffset an, falls die ersten Mitglieder in ungeraden Zeilen stehenROW()+rowOffset ISTSIEBENgibt TRUE zurück, wenn r die Zeile + rowOffset gerade istISEVEN(ROW()+rowOffset) WENN's value if TRUE = 1. Mitglied, & value if false = 2.IF(ISEVEN(ROW()+rowOffset), |
#6 | 1. Mitglied vergleicht Wert mit 2. MitgliedIF(r>OFFSET(r,1,0),r-OFFSET(r,1,0),0) WENNtestet, ob r größer als der Wert istVERSCHIEBUNGdurch 1 Zeile darunter und 0 Spalten "Wert wenn wahr" ist von IF(r>OFFSET(r,1,0), dem Wert darunterabzuziehen r r-OFFSET(r,1,0) "Wert wenn falsch" ist 0 |
#7 | 2. Mitglied vergleicht Wert mit 1. MitgliedIF(r>OFFSET(r,-1,0),r-OFFSET(r,-1,0),0) WENNtestet, ob r größer als der Wert istVERSCHIEBUNGdurch 1 Zeile darüber und 0 Spalten "Wert wenn wahr" ist vom IF(r>OFFSET(r,-1,0), Wert darüberabzuziehen e r r-OFFSET(r,-1,0) "Wert wenn falsch" ist 0 |
#8 | Erstellen Sie ein Array newData aus Spalte ID 1, Spalte ID2 undnewValues INDEXruft die erste Spalte ID1 aus data dem Bereich abINDEX(data,,1) INDEX erhält auch die zweite Spalte ID2 aus data dem BereichINDEX(data,,2) HSTACKkombiniert indizierte Spalten und newValues in ein 3-Spalten-ArraynewData HSTACK(INDEX(data,,1), INDEX(data,,2), newValues) |
#9 | FILTERArray newData , bei dem die Werte der 3. Spalte > 0 sindFILTER(newData, INDEX(newData,,3)>0)) |