Script ini akan melakukan hal yang sama (ditambah sedikit lagi).
Kode
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;
}
Dijelaskan
Di awal skrip, ada sedikit penanganan kesalahan. Setelah itu akan menemukan entri terendah pertama dibandingkan dengan nilai input. Setelah ditemukan, ia akan menghitung dan menyajikan hasilnya.
Catatan
Jika nilai yang dipilih sama dengan 20, skrip mengembalikan 150 sebagai tempat rumus menghasilkan #DIV/0
.
Tangkapan layar
Rumus
Gunakan rumus berikut untuk memperhitungkan semua nilai akun
=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))
Contoh
Tambahkan skrip di bawah Alat> Editor skrip dan tekan tombol simpan (tidak diperlukan otentikasi).
Saya telah membuat contoh file untuk Anda: Cara menginterpolasi data dalam rentang di Google Sheets