Este script hará lo mismo (y un poco más).
Código
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;
}
Explicado
Al comienzo del script, hay un pequeño manejo de errores. Después de eso, encontrará la primera entrada más baja en comparación con el valor de entrada. Una vez encontrado, hará algunas matemáticas y presentará el resultado.
Nota
Si el valor seleccionado es igual a 20, el script devuelve 150 como el rendimiento de la fórmula #DIV/0
.
Captura de pantalla
Fórmula
Use la siguiente fórmula para tener en cuenta todos los valores
=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))
Ejemplo
Agregue la secuencia de comandos en Herramientas> Editor de secuencias de comandos y presione el botón Guardar (no se necesita autenticación).
He creado un archivo de ejemplo para usted: Cómo interpolar datos en un rango en Hojas de cálculo de Google