Dieses Skript macht dasselbe (plus ein bisschen mehr).
Code
function myInterpolation(x, y, value) {
if(value > Math.max.apply(Math, x) || value < Math.min.apply(Math, x)) {
throw "value can't be interpolated !!";
return;
}
var check = 0, index;
for(var i = 0, iLen = x.length; i < iLen; i++) {
if(x[i][0] == value) {
return y[i][0];
} else {
if(x[i][0] < value && ((x[i][0] - check) < (value - check))) {
check = x[i][0];
index = i;
}
}
}
var xValue, yValue, xDiff, yDiff, xInt;
yValue = y[index][0];
xDiff = x[index+1][0] - check;
yDiff = y[index+1][0] - yValue;
xInt = value - check;
return (xInt * (yDiff / xDiff)) + yValue;
}
Erklärt
Am Anfang des Skripts gibt es eine kleine Fehlerbehandlung. Danach wird der erste niedrigste Eintrag im Vergleich zum Eingabewert gefunden. Sobald es gefunden wurde, wird es einige Berechnungen durchführen und das Ergebnis präsentieren.
Hinweis
Wenn der ausgewählte Wert gleich 20 ist, gibt das Skript 150 zurück, wenn die Formel ergibt #DIV/0
.
Bildschirmfoto
Formel
Verwenden Sie die folgende Formel, um alle Werte zu berücksichtigen
=IF(
ISNA(
MATCH(C2,A2:A7,0)),
FORECAST(
$C$2,
OFFSET(B$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1),
OFFSET(A$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1)),
INDEX(
B2:B7,
MATCH(C2,A2:A7,0)
,0)
)
copy / paste
=IF(ISNA(MATCH(C2, A2:A7, 0)), FORECAST($C$2,OFFSET(B$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1),OFFSET(A$2,MATCH($C$2,A$2:A$7,1)-1,0,2,1)), INDEX(B2:B7, MATCH(C2, A2:A7, 0), 0))
Beispiel
Fügen Sie das Skript unter Extras> Skripteditor hinzu und klicken Sie auf die Schaltfläche Speichern (keine Authentifizierung erforderlich).
Ich habe eine Beispieldatei für Sie erstellt: So interpolieren Sie Daten in einem Bereich in Google Sheets